CVE-2026-12227 是 WordPress 的 Visual Composer Website Builder 插件中的一个严重 (CVSS 9.8) 未认证本地文件包含 (LFI) 漏洞,影响所有版本直至并包括 45.16.0。该缺陷存在于 vcv-template 参数中,允许攻击者包含并执行服务器上的任意文件。这可能导致敏感数据泄露、访问控制绕过,甚至在服务器环境配置错误时导致完全的远程代码执行 (RCE)。
CVE-2026-12227
9.8/10
Visual Composer Website Builder 插件(最高版本 45.16.0)
根本原因: 该漏洞被归类为 CWE-98:PHP 程序中 Include/Require 语句的文件名控制不当(通常称为 PHP 远程文件包含)。它源于 PageTemplatesController.php 文件中的逻辑缺陷,具体位于 viewPageTemplate() 函数内,该函数在优先级 11 处挂接到 WordPress 的 template_include 过滤器,且没有任何身份验证检查。
核心问题是“先验证后修改”缺陷:
验证(对原始输入):代码首先对用户提供的 vcv-template 参数原始值调用 WordPress 的 validate_file() 函数。该函数旨在拒绝包含字面目录遍历序列(如 ..)的路径。在此阶段,恶意输入 theme:.theme:./.theme:./.theme:./wp-links-opml.php 不包含字面 ..,因此通过验证。
修改(验证后):验证后立即,代码检查模板类型是否为 vc-custom-layout 以及值是否包含字符串 theme:。如果是,则执行 str_replace('theme:', '', $current['value']),从值中移除所有出现的 theme:。
汇聚点:修改后的值随后被传递给 locate_template(),该函数解析路径并包含文件。由于 theme: 字符串被剥离,碎片化的遍历序列被融合在一起,形成类似 ../../../../wp-links-opml.php 的有效路径,而该路径在其最终形式中从未被验证。
攻击面: 攻击向量:网络 (AV:N) — 该漏洞可通过 HTTP/HTTPS 直接访问。
身份验证:无需 (PR:N) — 这是一个未认证漏洞。任何远程攻击者无需有效账户即可触发。
用户交互:无需 (UI:N)。
受影响组件:WordPress 的 Visual Composer Website Builder 插件。
易受攻击参数:vcv-template 参数,与 vcv-template-type 参数结合使用。
触发条件:插件必须安装并在 WordPress 站点上激活,且前端页面必须使用 Visual Composer 构建(即必须存在正常的永久链接)。
利用说明: 影响:该缺陷允许未认证攻击者包含并执行服务器上的任意本地文件。由于包含的 PHP 文件会被执行,这可能导致远程代码执行 (RCE),从而完全破坏服务器的机密性、完整性和可用性。
利用技术:攻击者可以通过构造恶意的 vcv-template 值来利用此漏洞,该值使用 theme: 前缀绕过验证,如根本原因所述。例如,请求可能如下所示: POST /?vcv-template-type=vc-custom-layout&vcv-template=theme:.theme:./.theme:./.theme:./wp-links-opml.php。
RCE 升级:虽然 LFI 本身已属严重,但实现 RCE 通常取决于服务器环境。一种常见方法是包含已上传到服务器的文件(例如,包含嵌入 PHP 代码的看似无害的图像文件),或利用其他服务器配置错误。
PoC 可用性:多个概念验证漏洞利用公开可用,包括 Python 脚本和 Nuclei 模板,可用于授权实验室环境中的验证
[*] 上面给出的 Python 代码
补丁版本:45.16.1