
Proof-of-Concept-Exploit für CVE-2026-82222, eine nicht authentifizierte PHP-Objektinjektion, die zu Remote-Codeausführung im GiveWP-WordPress-Plugin bis Version 4.16.7.1 führt.
| Bereich | Erreichbar? |
|---|
<= 4.16.5.1 | Standardinstallation. Ein veröffentlichtes Formular, ein aktives Gateway. |
4.16.6 bis 4.16.7.1 | Ja, wenn ein Legacy-Formular (nicht V3) existiert. Eine reine V3-Neuinstallation ist es nicht. |
Python 3.8+ und requests.
pip install requests
python cve-2026-82222.py http://127.0.0.1:8080
python cve-2026-82222.py http://127.0.0.1:8080 --check
python cve-2026-82222.py http://127.0.0.1:8080 42 -c id
python cve-2026-82222.py http://127.0.0.1:8080 -g offline
-c ist standardmäßig id. Kein < > & % im Befehl; Leerzeichen werden zu ${IFS}.
Übergeben Sie eine Formular-ID, wenn die Erkennung sie übersieht. Übergeben Sie -g, wenn das Skript kein aktiviertes Gateway finden kann.
Die Spendenanfrage gibt oft HTTP 500 zurück oder läuft in einen Timeout. Das ist zu erwarten. Der Session-Write erfolgt zuerst. Die Ausgabe von system() befindet sich in der nächsten Anfrage (/?give_action=view_receipt und ähnliche), nicht in einer Datei auf der Festplatte.
python cve-2026-82222.py -h für den Rest.
POST give_action=user_register. GiveWP erstellt das Konto und setzt ein Auth-Cookie. Es berücksichtigt users_can_register nicht./wp-admin/profile.php in last_name gespeichert.give_last aus. process-donation.php liest den Namen aus den Usermeta, führt maybeSafeUnserialize (allowed_classes => false) aus und schreibt __PHP_Incomplete_Class in wp_give_sessions. PHP gibt die ursprünglichen Objektbytes auf dem Weg hinein erneut aus.TCPDF::__destruct() erreicht call_user_func_array('system', [cmd]). Stdout befindet sich in dieser Antwort.TCPDF.__destruct()
-> Symfony Session.getIterator()
-> Give\TestData ProviderForwarder.__call()
-> call_user_func_array('system', [cmd])
pre_user_last_name entfernt NUL, sodass die Gadget-Eigenschaften unverändert bleiben. Backslashes werden vervierfacht, um stripslashes_deep und dann removeBackslashes zu überstehen.
MIT. Siehe LICENSE.