一个即插即用的 WordPress 插件,用于阻止 FunnelForms Pro ≤ 3.8.1 中存在漏洞的 Demo Import 处理器,以缓解 远程代码执行(CVE-2026-39440,CVSS 9.9) 风险。
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-39440 |
| CVSS 评分 | 9.9(严重) |
| 受影响版本 | FunnelForms Pro ≤ 3.8.1 |
| 所需权限 | 低(订阅者级别) |
| 漏洞类型 | 代码注入 → 远程代码包含 → RCE |
| 是否已修复? | 官方厂商暂未发布补丁 |
| 发现者 | 3ele / Sebastian Weiss |
| 发布时间 | 2026 年 4 月 21 日(Patchstack) |
af2_demoimport AJAX 处理器(admin/menu_ajax_functions/demoimport.php)存在两个致命缺陷:
unserialize()$jsonFile = file_get_contents( $imp_exp_tmp_path . 'af2_export.txt' );
$toImport = unserialize( urldecode( $jsonFile ) );
包含恶意 af2_export.txt 的精心构造的 ZIP 文件会在反序列化时触发 PHP 对象注入——从而导致完全远程代码执行。
$_POST['filename'] 实现路径遍历$filename = $_POST['filename'];
$file = pathinfo( AF2_PLUGIN_DIR . '/demos/' . $locale . '/' . $filename . '.zip' );
没有使用 basename(),也没有白名单。攻击者可提交 ../../../uploads/evil,从而从 demos/ 目录之外拉取任意 ZIP 文件。
拥有最低(订阅者)权限的已认证用户即可利用此漏洞链。
cve-2026-39440-funnelforms-fix 文件夹上传至 wp-content/plugins/将 cve-2026-39440-fix.php 直接复制到 wp-content/mu-plugins/。无需激活——MU-Plugins 会自动加载。
| 操作 | 钩子 | 优先级 |
|---|---|---|
| 阻止 AJAX 处理器 | wp_ajax_af2_demoimport | 1 |
| 移除管理子菜单 |
存在漏洞的代码路径永远不会被执行。wp_send_json_error() 会在内部调用 wp_die(),因此插件的处理器永远不会被触发。
激活后:
admin-ajax.php?action=af2_demoimport 的请求都会返回:
{
"success": false,
"data": { "message": "Demo import is temporarily disabled for security reasons (CVE-2026-39440)." }
}
一旦 FunnelForms Pro 发布官方补丁版本(> 3.8.1),即可停用并删除此插件,前提是该版本:
unserialize() 替换为 json_decode() 或实施严格的白名单机制filename 参数进行过滤(使用 basename()、已知演示文件白名单)admin_menu| 999 |
| 移除 demoimport 的 JS/CSS | admin_enqueue_scripts | 20 |