
Drop-in WordPress plugin that blocks the vulnerable Demo Import handler in FunnelForms Pro to mitigate Remote Code Execution (CVE-2026-39440).
A drop-in WordPress plugin that blocks the vulnerable Demo Import handler in FunnelForms Pro ≤ 3.8.1 to mitigate Remote Code Execution (CVE-2026-39440, CVSS 9.9).
| Field | Value |
|---|---|
| CVE ID | CVE-2026-39440 |
| CVSS Score | 9.9 (Critical) |
| Affected | FunnelForms Pro ≤ 3.8.1 |
| Privileges | Low (Subscriber-level) |
| Type | Code Injection → Remote Code Inclusion → RCE |
| Patched? | No official vendor patch available yet |
| Discovered by | 3ele / Sebastian Weiss |
| Published | 21 Apr 2026 (Patchstack) |
The af2_demoimport AJAX handler (admin/menu_ajax_functions/demoimport.php) has two fatal flaws:
unserialize() on Attacker-Controlled Data$jsonFile = file_get_contents( $imp_exp_tmp_path . 'af2_export.txt' );
$toImport = unserialize( urldecode( $jsonFile ) );
A crafted ZIP file containing a malicious af2_export.txt triggers PHP Object Injection at deserialization — leading to full Remote Code Execution.
$_POST['filename']$filename = $_POST['filename'];
$file = pathinfo( AF2_PLUGIN_DIR . '/demos/' . $locale . '/' . $filename . '.zip' );
No basename(), no whitelist. An attacker supplies ../../../uploads/evil and pulls an arbitrary ZIP from outside the demos/ directory.
An authenticated user with minimal (Subscriber) privileges can exploit this chain.
cve-2026-39440-funnelforms-fix folder to wp-content/plugins/Copy cve-2026-39440-fix.php directly to wp-content/mu-plugins/. No activation needed — MU-Plugins load automatically.
| Action | Hook | Priority |
|---|---|---|
| Blocks AJAX handler | wp_ajax_af2_demoimport | 1 |
The vulnerable code path is never executed. wp_send_json_error() calls wp_die() internally, so the plugin's handler is never reached.
After activation:
admin-ajax.php?action=af2_demoimport returns:
{
"success": false,
"data": { "message": "Demo import is temporarily disabled for security reasons (CVE-2026-39440)." }
}
This plugin can be deactivated and deleted once FunnelForms Pro releases an official patched version (> 3.8.1) that:
unserialize() with json_decode() or implements a strict allowlistfilename parameter (basename(), allowlist of known demos)| Removes admin submenu | admin_menu | 999 |
| Dequeues demoimport JS/CSS | admin_enqueue_scripts | 20 |