漏洞分析 | WordPress Lazy Blocks 远程代码执行漏洞(CVE-2026-1560)

漏洞概述

Lazy Blocks 是一款 WordPress Gutenberg 插件,允许用户通过可视化界面创建自定义块,并支持在块模板中直接编写 PHP 代码作为渲染逻辑。

该漏洞的核心问题在于对用户输入缺乏严格的类型检查与过滤,特别是在 REST API 接口及自定义块构建器模块中,导致已认证用户可通过构造恶意参数触发代码执行。(网宿评分:高危、CVSS 3.1 评分:8.8)

目前该漏洞POC状态已在互联网公开,建议用户尽快做好自查及防护。

受影响版本

Lazy Blocks <= 4.2.0

漏洞分析

从危险函数出发,classes/class-blocks.php这里有一个显眼的eval

$code直接拼进eval,没有任何过滤。接着思考$code能不能被外部控制?

全局搜索php_eval的调用,只有一处,位于render_callback():

触发条件很清晰,需要同时满足两点:

  1. $code['output_method'] 等于 'php'
  2. $code[$custom_render_name] 有值,这就是最终传入eval的内容

继续往上追,$code从哪来:

$block['code']在marshal_block_data_with_controls()里组装:

继续搜索marshal_block_data(封装了marshal_block_data_with_controls)的调用方,找到classes/class-rest.php的 block_builder_preview:

这个接口的作用在于,用户在后台编辑块时,编辑器调它来即时看效果,所以它接收的是还没存库的原始配置,直接走渲染流程。导致code_output_method和code_editor_html会原样流入marshal_block_data,最终到达php_eval,全程没有经过数据库,所以也不经过任何保存时的校验。

那么触发这个接口需要什么权限?

显然,请求里不带post_id时,系统只检查edit_posts。而WordPress里的Contributor角色默认就有edit_posts,即注册用户就能申请到的最低编辑权限。

漏洞复现

修复方案

目前官方已有可更新版本,建议受影响用户升级至最新版本:

https://wordpress.org/plugins/lazy-blocks/

产品支持

网宿全站防护-WAF已支持对该漏洞利用攻击的防护,并持续挖掘分析其他变种攻击方式和各类组件漏洞,第一时间上线防护规则,缩短防护“空窗期”。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值