3ele-projects/cve-2026-39440-funnelforms-fix

GitHub: 3ele-projects/cve-2026-39440-funnelforms-fix

针对 FunnelForms Pro ≤ 3.8.1 的 RCE 漏洞(CVE-2026-39440)提供临时虚拟补丁,在官方修复发布前通过拦截 AJAX 处理器阻止攻击利用。

Stars: 0 | Forks: 0

# CVE-2026-39440 FunnelForms 修复 ## 漏洞详情 | 字段 | 值 | |------------------|-----------------------------------------------------------------------| | **CVE ID** | [CVE-2026-39440](https://nvd.nist.gov/vuln/detail/CVE-2026-39440) | | **CVSS 评分** | 9.9 (严重) | | **受影响版本** | FunnelForms Pro ≤ 3.8.1 | | **所需权限** | 低 (订阅者级别) | | **类型** | 代码注入 → 远程代码包含 → RCE | | **已修补?** | 尚无官方供应商补丁可用 | | **发现者**| [3ele / Sebastian Weiss](https://patchstack.com/database/researchers/e24e309a-024a-42e0-8f49-5178ae2d7c73) | | **发布日期** | 2026 年 4 月 21 日 (Patchstack) | ## 根本原因 `af2_demoimport` AJAX 处理器 (`admin/menu_ajax_functions/demoimport.php`) 存在两个致命缺陷: ### 1. 对攻击者可控数据调用 `unserialize()` ``` $jsonFile = file_get_contents( $imp_exp_tmp_path . 'af2_export.txt' ); $toImport = unserialize( urldecode( $jsonFile ) ); ``` 一个包含恶意 `af2_export.txt` 的特制 ZIP 文件会在反序列化时触发 **PHP 对象注入** —— 进而实现完全的远程代码执行。 ### 2. 通过 `$_POST['filename']` 实现路径遍历 ``` $filename = $_POST['filename']; $file = pathinfo( AF2_PLUGIN_DIR . '/demos/' . $locale . '/' . $filename . '.zip' ); ``` 没有使用 `basename()`,也没有白名单。攻击者可以提供 `../../../uploads/evil` 并从 `demos/` 目录外部拉取任意 ZIP 文件。 ### 缺失的安全控制 - 无 nonce 验证 - 无权限检查 - 无输入清理 拥有最低权限(订阅者)的已认证用户即可利用此攻击链。 ## 安装说明 ### 作为常规插件安装(推荐) 1. 下载或克隆此代码库 2. 将 `cve-2026-39440-funnelforms-fix` 文件夹上传至 `wp-content/plugins/` 3. 在 **插件 → 已安装的插件** 中激活它 ### 作为 MU-Plugin 安装(备选) 将 `cve-2026-39440-fix.php` 直接复制到 `wp-content/mu-plugins/`。无需激活 —— MU-Plugin 会自动加载。 ## 此插件的功能 | 操作 | 钩子 | 优先级 | |-------------------------------------|-----------------------------|----------| | 阻止 AJAX 处理器 | `wp_ajax_af2_demoimport` | 1 | | 移除管理子菜单 | `admin_menu` | 999 | | 取消 demoimport JS/CSS 的加载 | `admin_enqueue_scripts` | 20 | 易受攻击的代码路径**永远不会被执行**。`wp_send_json_error()` 内部会调用 `wp_die()`,因此插件原本的处理器永远不会被触及。 ## 验证方法 激活后: 1. Funnelforms 下不应再出现 **"Demo import"** 菜单项 2. 对 `admin-ajax.php?action=af2_demoimport` 的任何请求都将返回: { "success": false, "data": { "message": "出于安全原因 (CVE-2026-39440),演示导入功能已暂时禁用。" } } ## 何时移除 一旦 FunnelForms Pro 发布包含以下修复的官方补丁版本(> 3.8.1),即可停用并删除此插件: - 使用 `json_decode()` 替换 `unserialize()` 或实施严格的白名单 - 对 `filename` 参数进行清理(使用 `basename()` 或已知演示的白名单) - 添加 nonce 验证和权限检查 ## 致谢 - **发现与报告者**:[3ele / Sebastian Weiss](https://patchstack.com/database/researchers/e24e309a-024a-42e0-8f49-5178ae2d7c73) - **发布平台**:[Patchstack](https://patchstack.com/) ## 许可证 [GPL v2 或更高版本](https://www.gnu.org/licenses/gpl-2.0.html)
标签:CISA项目, CVE-2026-39440, CVSS 9.9, ffuf, FunnelForms Pro, Patchstack, PHP安全, PHP对象注入, RCE, Web安全, WordPress插件漏洞, 反序列化漏洞, 安全漏洞, 文件包含, 未授权访问, 漏洞分析, 编程工具, 蓝队分析, 路径探测, 路径穿越, 远程代码执行, 高危漏洞