FunnelForms Pro ≤ 3.8.1 の脆弱なデモインポートハンドラをブロックし、リモートコード実行(CVE-2026-39440、CVSS 9.9) を緩和するドロップイン WordPress プラグインです。
| フィールド | 値 |
|---|---|
| CVE ID | CVE-2026-39440 |
| CVSS スコア | 9.9(Critical) |
| 影響を受ける | FunnelForms Pro ≤ 3.8.1 |
| 必要な権限 | 低(購読者レベル) |
| 種別 | コードインジェクション → リモートコードインクルージョン → RCE |
| 修正済み? | 公式ベンダーパッチはまだ提供されていません |
| 発見者 | 3ele / Sebastian Weiss |
| 公開日 | 2026年4月21日(Patchstack) |
af2_demoimport AJAX ハンドラ(admin/menu_ajax_functions/demoimport.php)には、2つの致命的な欠陥があります。
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-プラグインは自動的に読み込まれます。
| アクション | フック | 優先度 |
|---|---|---|
| AJAX ハンドラをブロック | wp_ajax_af2_demoimport | 1 |
| 管理サブメニューを削除 |
脆弱なコードパスは実行されることはありません。wp_send_json_error() は内部で wp_die() を呼び出すため、プラグインのハンドラには到達しません。
有効化後:
admin-ajax.php?action=af2_demoimport へのリクエストは以下を返します:
{
"success": false,
"data": { "message": "デモインポートはセキュリティ上の理由(CVE-2026-39440)により一時的に無効化されています。" }
}
FunnelForms Pro が以下の条件を満たす公式パッチ版(> 3.8.1)をリリースしたら、このプラグインは無効化・削除できます:
unserialize() を json_decode() に置き換えるか、厳格な許可リストを実装するfilename パラメータをサニタイズする(basename()、既知のデモの許可リスト)admin_menu |
| 999 |
| demoimport の JS/CSS をデキュー | admin_enqueue_scripts | 20 |