
WPForms Pro <= 1.10.1.1 - Nicht authentifiziertes beliebiges Dateischreiben über Chunked-Upload-Init-/Finalize-Reihenfolge
WPForms Pro ≤ 1.10.1.1 – Nicht authentifiziertes beliebiges Dateischreiben durch Reihenfolge von Chunked-Upload-Init/-Finalize
Proof-of-Concept Exploit
Chunked-Upload-Init/-Finalize-Reihenfolge → Vorhersagbarer Pfad → Remote Code Execution
Das WPForms-Pro-Plugin für WordPress ist in allen Versionen bis einschließlich 1.10.1.1 anfällig für beliebiges Datei-Upload über die Funktion ajax_chunk_upload_finalize. Dies liegt daran, dass die Dateityp-Validierung nach erfolgt, nachdem Chunk-Metadaten und Dateiinhalte bereits auf die Festplatte geschrieben wurden, und die zusammengesetzte Datei bei fehlgeschlagener Validierung nicht gelöscht wird. Dadurch können nicht authentifizierte Angreifer Dateien hochladen, die ausführbar sein können, was Remote Code Execution ermöglicht.
wpforms_upload_chunk_init → Metadaten werden VOR der Erweiterungsvalidierung erstellt
wpforms_upload_chunk → Chunk-Bytes werden unabhängig vom Init-Ergebnis geschrieben
wpforms_file_chunks_uploaded → Datei wird VOR der Typvalidierung assembliert
→ Datei bleibt auch bei fehlgeschlagener Validierung auf der Festplatte
Die Angriffskette nutzt einen kritischen Reihenfolgefehler im Lebenszyklus des chunked Uploads:
SHA1(UUID)-0.chunk)wp_ajax_nopriv_*)readme.txt und HTML-Quellen, um verwundbare WPForms-Versionen zu identifizierenwpforms_upload_chunk_init extern erreichbar ist, bevor fortgefahren wirdSHA1(UUID)SHA1(client-gesteuerte UUID), um die genaue Chunk-URL ohne Raten abzuleiten/wpforms/tmp/ vor und nach Exec-Uploads, um neu geschriebene Dateien zu identifizieren<32hex>.<ext> Dateinamen-Mustern.chunk/x.php, ), um PHP-Ausführung auf Nicht-PHP-Erweiterungen auszulösenPython >= 3.8
pip install requests urllib3 beautifulsoup4
beautifulsoup4ist optional, aber für eine zuverlässigere Feldextraktion empfohlen.
python CVE-2026-10818.py
Sie werden nach Folgendem gefragt:
| Eingabeaufforderung | Beschreibung | Standard |
|---|---|---|
| Zieldatei | Pfad zu einer Textdatei mit einem Ziel pro Zeile | list.txt |
| Threads | Anzahl der gleichzeitigen Worker (1–20) | 5 |
https://example.com
http://target.org
subdomain.example.net
192.168.1.100
https://example.com/wordpress
Eine URL pro Zeile. Unterstützt http://, https://, nackte Domains, IPs und Unterverzeichnis-Installationen.
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ██▄ ██ ██ ██ ┃
┃ ████ ██ ████ ┃
┃ ██ ██ ██ ██ ┃
┃ ██ ████ ████ ┃
┃ ██ ███ ██ ██ ┃
┃ ┃
┃ Nxploited ━ Khaled Alenazi ━ T.m @Kxploit ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ CVE-2026-10818 WPForms Pro ≤ 1.10.1.1 ┃
┃ Chunked Upload → Predictable Path → RCE ┃
┃ Results ━▸ Nx_hit/ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Während des Scans durchläuft jedes Ziel benannte Phasen:
02:14:52 ◆ target.com VER WPForms 1.9.3.1 verwundbar
02:14:53 ◆ target.com FORM 1 Upload-Formular(e) auf /contact
02:14:53 ◆ target.com UPLOAD 6 sichere + 5 ausführbare Payloads
02:14:55 ◆ target.com FIN poly_png → a8f3...1b22.png URL zurückgegeben
02:14:57 ◆ target.com DIR Listing aktiviert, 4 Datei(en) vor Exec-Upload
02:14:59 ◐ target.com EXEC shell_php → finalisiert auf Festplatte (Hash unbekannt)
02:15:01 ◆ target.com DIR 1 NEUE Exec-Datei(en) nach Upload!
● target.com SHELL dir-new:7c4f...e8a1.php https://target.com/wp-content/uploads/wpforms/tmp/7c4f...e8a1.php
Alle Ergebnisse werden in Nx_hit/ gespeichert:
| Datei | Inhalt |
|---|---|
Nx_shell.txt | Bestätigte RCE – URL, Bezeichnung und Antworttextvorschau |
Nx_vuln.txt | Bestätigtes beliebiges Dateischreiben ohne Ausführungsverifikation |
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ABGESCHLOSSEN 150 Ziele verarbeitet ┃
┃ ┃
┃ ● 3 shell ◐ 12 vuln ○ 85 skip ✗ 50 miss ┃
┃ ┃
┃ Ergebnisse ━▸ Nx_hit/ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
| Symbol |
|---|
Ziel
│
├─ Erreichbarkeit (HTTPS → HTTP-Fallback)
├─ WPForms-Versionserkennung
├─ Formularerkennung (100+ Seitenpfade + Sitemap-Crawl)
├─ AJAX-Routenvalidierung
│
├─ Phase 1: Sichere Uploads (png/jpg/pdf + finalize → URL)
│ └─ Shell-Verifikation auf zurückgegebenen URLs
│
├─ Phase 2: Verzeichnis-Schnappschuss (VORHER)
│
├─ Phase 3: Exec-Uploads (php/phtml/php5/phar/shtml + finalize)
│ ├─ Geleakte Dateinamen-Extraktion aus Antwort
│ └─ Hash-Muster-Extraktion aus Body + Headern
│
├─ Phase 4: Verzeichnis-Schnappschuss (NACHHER) → Diff → Neue Exec-Dateien
│ └─ Shell-Verifikation auf jeder neuen Datei
│
├─ Phase 5: Hash-Leak-Verifikation
│ └─ URLs aus geleakten Hashes erstellen → Shell-Check
│
├─ Phase 6: Chunk-Only-Uploads (kein finalize → vorhersagbarer SHA1-Pfad)
│ └─ Direkter Zugriff + PATH_INFO-Bypass-Probing
│
└─ Ergebnisklassifikation (shell / vuln / skip / miss)
Dieses Tool wird ausschließlich für autorisierte Sicherheitstests und Bildungsforschung bereitgestellt. Verwenden Sie es nur auf Systemen, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Erlaubnis zum Testen haben.
Unbefugter Zugriff auf Computersysteme ist illegal. Der Autor übernimmt keine Haftung für Missbrauch, Schäden oder rechtliche Konsequenzen, die aus der Nutzung dieser Software entstehen.
Durch die Nutzung dieses Tools erklären Sie sich damit einverstanden, dass Sie allein für Ihre Handlungen verantwortlich sind und alle geltenden Gesetze und Vorschriften einhalten werden.
Von: Nxploited
Khaled Alenazi
T.m @Kxploit
| Feld | Details |
|---|
| CVE-ID | CVE-2026-10818 |
| Betroffenes Plugin | WPForms Pro (WordPress) |
| Betroffene Versionen | Alle Versionen bis einschließlich 1.10.1.1 |
| Typ | Nicht authentifiziertes beliebiges Dateischreiben |
| CWE | CWE-434: Unrestricted Upload of File with Dangerous Type |
| CVSS 3.1 | 8.1 HIGH — CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Authentifizierung | Keine erforderlich |
/.php| Bedeutung |
|---|
● shell | PHP-Ausführung auf dem entfernten Ziel bestätigt |
◐ vuln | Datei auf Festplatte geschrieben, Ausführung nicht bestätigt |
○ skip | Ziel nicht erreichbar, gepatcht oder kein Upload-Formular gefunden |
✗ miss | Upload-Versuche fehlgeschlagen |