Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
givewp-cve-2026-82222-rce-lab — # Autorisierte Docker-Lab-Umgebung und sauberer PoC zur Validierung von CVE-2026-82222 RCE in GiveWP 4.16.5.1 sowie des Fixes in 4.16.7.2. | Kitploit
Tools/GitHubGitHub/dinosn/givewp-cve-2026-82222-rce-lab
SchwachstellenanalyseExploitationWebanwendungs-ExploitationLernen & BildungLabs & Praxis
GitHubdinosn/givewp-cve-2026-82222-rce-lab

givewp-cve-2026-82222-rce-lab

# Autorisierte Docker-Lab-Umgebung und sauberer PoC zur Validierung von CVE-2026-82222 RCE in GiveWP 4.16.5.1 sowie des Fixes in 4.16.7.2.

Repository anzeigen
1vor 9h 4mNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-82222 — GiveWP Marker-Only RCE-Validierungslabor

Sicherheitsforschungsmaterial zur Reproduktion und Validierung von CVE-2026-82222 in einem isolierten Docker-Labor.

Für direkten RCE-PoC und URL-Scan verwenden Sie CVE-2026-8222-RCE.py

Bewertung

Status: im bereitgestellten Labor nachgewiesen

GiveWP 4.16.5.1 erlaubt es einem zunächst nicht authentifizierten Angreifer, einen PHP-Objektgraphen zu persistieren, ihn über die GiveWP-Sitzungsverwaltung wiederzubeleben und einen festen Marker-Befehl als WordPress-Webserver-Benutzer auszuführen.

Getestetes positives Ergebnis:

root@kitploit:~
GiveWP:    4.16.5.1
WordPress: 6.6.2
PHP:       8.1.30
Result:    /tmp/CVE-2026-82222-RCE-GETBAG created by www-data

Das End-to-End-Ergebnis wurde auch gegen unveränderte, nicht instrumentierte GiveWP-4.16.5.1-Quellen reproduziert. GiveWP 4.16.7.2 blockierte den HTTP-Träger in der getesteten Konfiguration und blockierte unabhängig davon das Terminal-Gadget während einer direkten Kontrolle.

Dies demonstriert die Befehlsausführung innerhalb des WordPress-Containers. Es demonstriert keinen Root-Zugriff, keinen Container-Ausbruch, keine laterale Bewegung und keine Host-Kompromittierung.

Sicherheitsgrenze

Verwenden Sie dieses Repository nur auf Systemen, die Ihnen gehören oder für die Sie ausdrücklich autorisiert sind, sie zu testen.

Der bereitgestellte PoC ist bewusst eingeschränkt:

  • Er führt nur touch /tmp/CVE-2026-82222-RCE-GETBAG aus.
  • Er bietet keine Option für beliebige Befehle.
  • Er erstellt keine Shell, keinen Callback, keine Persistenz und keine Privilegieneskalation.
  • Er lehnt Nicht-Loopback-Ziele ab, es sei denn, der Bediener liefert das explizite --allow-authorized-non-loopback-Flag.
  • Docker veröffentlicht WordPress nur auf 127.0.0.1.
  • Der Compose-Projektname wird aus dem Checkout-Pfad abgeleitet, sodass ein Klon die Container oder Volumes eines anderen Klons nicht abreißen kann.
  • Das Labor verwendet unveränderte offizielle Plugin-Quellen; es instrumentiert oder patcht das verwundbare Ziel nicht.

Der HTTP-Test erstellt einen Wegwerf-Spenderbenutzer, Metadaten und GiveWP-Sitzungszeilen. Verwenden Sie nach dem Test den enthaltenen Reset-Befehl.

Schnellstart

Voraussetzungen:

  • Docker mit Compose v2
  • Python 3.10 oder neuer
  • curl
  • unzip
  • sha256sum oder shasum
  • Netzwerkzugriff auf downloads.wordpress.org für offizielle Plugin-Archive

Führen Sie die vollständige verwundbare/gepatchte Matrix aus:

root@kitploit:~
./lab verify

Der Befehl:

  1. Lädt GiveWP 4.16.5.1 und 4.16.7.2 von WordPress.org herunter.
  2. Verifiziert beide SHA-256-Hashes.
  3. Baut ein frisches Loopback-only-WordPress-6.6.2/PHP-8.1-Labor mit explizit deaktivierter normaler WordPress-Registrierung auf.
  4. Testet unverändertes 4.16.5.1 und verlangt die Marker-Erstellung durch den Web-Benutzer.
  5. Baut ein zweites frisches Labor mit unverändertem 4.16.7.2 auf.
  6. Verlangt, dass der HTTP-Marker abwesend bleibt.
  7. Umgeht den Eingang in einer direkten Kontrolle und bestätigt, dass das gepatchte ProviderForwarder-Terminal den String-Callable ebenfalls ablehnt.

Das gepatchte Labor läuft am Ende weiter. Entfernen Sie es mit:

root@kitploit:~
./lab reset

Um einen anderen Loopback-Port zu verwenden:

root@kitploit:~
LAB_PORT=8099 ./lab verify

Erwartete Beweise

Die verwundbare Kontrolle muss mit konkreten Terminal-Beweisen enden:

root@kitploit:~
[PASS] E1: unauthenticated registration issued auth cookie
[PASS] E3: serialized graph persisted in own last_name
[PASS] E4: donation-form nonce obtained
[PASS] E5: session write reached expected post-sink HTTP status=500
[PASS] E6: session read/destruction trigger completed
marker present and owned by the WordPress web user
RESULT: VULNERABLE CONTROL CONFIRMED

Die gepatchte Kontrolle muss Folgendes zeigen:

root@kitploit:~
[PASS] P1: patched registration gate blocked auth cookie
DIRECT_MARKER=absent
HTTP marker absent and direct terminal gadget blocked
RESULT: PATCHED CONTROL CONFIRMED

Ein HTTP-500, gespeicherte Nutzlast, eine Ausnahme oder ein Detektor-Treffer ohne den Marker wird nicht als RCE-Beweis akzeptiert.

Manueller Labor-Lebenszyklus

Starten und testen Sie die verwundbare Version:

root@kitploit:~
./lab start vulnerable
./lab test

Starten und testen Sie die gepatchte Version:

root@kitploit:~
./lab start patched
./lab test

Aktuellen Zustand prüfen:

root@kitploit:~
./lab status

Container, Volumes, Testbenutzer, Sitzungen und Marker-Zustand entfernen:

root@kitploit:~
./lab reset

Zwischengespeicherte Plugin-ZIPs und extrahierte Assets werden für schnellere Wiederholungsläufe aufbewahrt. Entfernen Sie auch diese exakt generierten Assets mit:

root@kitploit:~
./lab reset --purge-assets

Betroffene und getestete Versionen

VersionBewertung
GiveWP 4.16.5.1RCE end-to-end reproduziert
GiveWP 4.16.6–4.16.7.1Als betroffen gemeldet; hier nicht einzeln reproduziert
GiveWP 4.16.7.2Gepatchte Negativkontrollen reproduziert
Spätere VersionenNicht einzeln getestet; auf die neueste unterstützte Version aktualisieren

Das öffentliche Advisory identifiziert Versionen bis einschließlich 4.16.7.1 als betroffen. Dieses Repository beweist direkt nur die beiden Versionen in seiner Positiv-/Negativ-Testmatrix.

Referenzen:

  • Patchstack-Advisory
  • CVE-2026-82222
  • GiveWP-Härtungs-Commit
  • Offizielle GiveWP-Plugin-Seite

Grundursache

Der Exploit kombiniert mehrere Verhaltensweisen:

  1. GiveWP 4.16.5.1 stellt eine Registrierungsaktion bereit, die einen Spender mit niedrigen Rechten erstellt und authentifiziert, selbst wenn die normale WordPress-Registrierung deaktiviert ist.
  2. Dieser Benutzer kann serialisierte Daten in seinen eigenen Namensmetadaten persistieren.
  3. Give\Helpers\Utils::maybeSafeUnserialize() verwendet allowed_classes => false, was __PHP_Incomplete_Class erzeugt, aber eine spätere Serialisierung bewahrt die ursprünglichen Klassennamen und Eigenschaften.
  4. Der Graph wird in einer GiveWP-Kaufsitzung gespeichert.
  5. Ein späteres uneingeschränktes maybe_unserialize() belebt die mitgelieferten Klassen wieder.
  6. Die automatische Zerstörung tritt in eine vollständige POP-Kette zu system() ein.

Im HTTP-Träger sind vier wörtliche Namespace-Backslashes erforderlich. Die beiden effektiven Stripping-Durchläufe reduzieren sie 4 -> 2 -> 1. Die Nutzlast ist NUL-frei, und PHP 8.1.30 wurde verifiziert, um den einfachen serialisierten Namen für die private Session::$attributeName-Eigenschaft zu hydratisieren.

Vollständige POP-Kette

root@kitploit:~
TCPDF::__destruct()
  -> TCPDF::_destroy(true)
  -> foreach ($this->imagekeys as $file)
  -> Symfony Session::getIterator()
  -> Session::getAttributeBag()
  -> Session::getBag($this->attributeName)
  -> $this->storage->getBag($attributeName)
  -> DonationFactory->__call('getBag', [$attributeName])
  -> call_user_func_array('system', [$attributeName])
  -> system('touch /tmp/CVE-2026-82222-RCE-GETBAG')

Angreifer-kontrollierter Graph:

root@kitploit:~
TCPDF
├── file_id = eindeutige Anfragekennung
└── imagekeys = Give\Vendors\Symfony\Component\HttpFoundation\Session\Session
    ├── attributeName = fester Marker-Befehl
    └── storage = Give\TestData\Factories\DonationFactory
        └── loadedProviders["getBag"] = "system"

Der kritische versteckte Übergang ist PHPs impliziter IteratorAggregate-Dispatch. TCPDF::$imagekeys ist untypisiert, sodass die Zuweisung einer Symfony-Session dazu führt, dass foreach Session::getIterator() aufruft.

Der Marker-Befehl wird ausgeführt, bevor Symfony den Rückgabetyp getAttributeBag(): AttributeBagInterface durchsetzt. Der resultierende TypeError und HTTP-500 sind Post-Sink-Effekte.

Was frühere Versuche übersehen haben

Der abgelehnte Kandidatengraph verwendete:

root@kitploit:~
TCPDF::$objcopy
  -> DonationFactory::$loadedProviders['__destruct'] = 'system'

Dieser Graph kann nicht funktionieren. TCPDF::_destroy() setzt nur objcopy zurück; PHP leitet die automatische Zerstörung nicht durch __call('__destruct', ...).

Die fehlende Operation war:

root@kitploit:~
foreach ($this->imagekeys as $file) {

Die frühere Überprüfung folgte Destruktoren und expliziten Methodenaufrufen, untersuchte aber nicht rekursiv das implizite Objektprotokoll, das durch foreach ausgelöst wird. Die Symfony-Session liefert die fehlende Brücke:

  • foreach ruft getIterator() auf.
  • getIterator() erreicht getBag($attributeName).
  • Der angreifer-kontrollierte storage ist eine DonationFactory.
  • Das undefinierte getBag ruft ProviderForwarder::__call() auf.
  • loadedProviders['getBag'] = 'system' wählt den Callable aus.
  • attributeName liefert das Befehlsargument.

Quellennachweis

Relevante GiveWP-4.16.5.1-Stellen:

KomponenteOrt
Geschütztes initiales Unserializesrc/Helpers/Utils.php:203-217,237-241
Spenden-Trägerincludes/process-donation.php:157
GiveWP-Sitzungspersistenzincludes/class-give-session.php:364-368,489-508
Uneingeschränkte Sitzungswiederbelebungincludes/class-give-session.php:347-350
TCPDF-Destruktorvendor/tecnickcom/tcpdf/tcpdf.php:2050-2052
Angreifer-kontrollierte Iterationvendor/tecnickcom/tcpdf/tcpdf.php:7885-7907
Symfony-Iterator-Brückevendor/vendor-prefixed/symfony/http-foundation/Session/Session.php:134-136
Symfony-getBag-Brückevendor/vendor-prefixed/symfony/http-foundation/Session/Session.php:259-283
Terminal-Callablesrc/TestData/Framework/ProviderForwarder.php:19-23
GiveWP-Composer-Autoloadergive.php:624-625

Offizielle Release-Hashes:

root@kitploit:~
give.4.16.5.1.zip
95fc6709b6ed284074bf09be096e28d6299fd4a103848c2b1c3bf8a5772cf98c

give.4.16.7.2.zip
c5bc98da2abb748c64d31a43679ff5f223092dfff6d214132a55dcbc948e91ae

Das Labor extrahiert jedes Plugin vor jedem frischen Start aus seinem verifizierten ZIP neu, kopiert es unverändert in WordPress und vergleicht den bereitgestellten vollständigen Plugin-Dateibaum byteweise mit der verifizierten Quelle. Die drei offiziellen Docker-Basisimages sind ebenfalls auf ihre Multi-Architektur-Manifest-Digests festgepinnt.

Warum 4.16.7.2 die Kette blockiert

GiveWP 4.16.7.2 fügt unabhängige Verteidigungen über Registrierung, Behandlung serialisierter Eingaben, Sitzungswiederbelebung, Datenmigration und Gadget-Härtung hinzu.

Die Terminal-Härtung erfordert, dass das aufgelöste Objekt den erwarteten Provider-Vertrag implementiert:

root@kitploit:~
if ( ! $provider instanceof Contract\Provider ) {
    return null;
}

Der angreifer-kontrollierte String system wird daher abgelehnt. Die direkte Kontrolle in diesem Repository umgeht den HTTP-Träger und verifiziert, dass diese Terminal-Verteidigung allein ihren Marker abwesend lässt.

Überprüfung einer realen Bereitstellung

Ein negatives PoC-Ergebnis allein beweist nicht, dass eine Website gepatcht ist. Eine WAF, anderes Routing, deaktivierte Registrierung, fehlendes Legacy-Formular, Sitzungskonfiguration oder deaktivierte PHP-Befehlsfunktionen können den Marker auf einer weiterhin verwundbaren Codebasis verhindern.

Bevorzugtes Validierungsverfahren:

  1. Notieren Sie die bereitgestellte GiveWP-Version und Quellrevision.
  2. Sichern oder snapshoten Sie die WordPress-Website und Datenbank.
  3. Stellen Sie diesen Snapshot in einer isolierten Staging-Umgebung wieder her.
  4. Deaktivieren Sie unnötigen ausgehenden Netzwerkzugriff.
  5. Führen Sie diesen Marker-only-Verifizierer gegen den Klon aus.
  6. Aktualisieren Sie GiveWP auf die neueste unterstützte Version, wobei 4.16.7.2 die Mindestversion mit den getesteten Fixes ist.
  7. Wiederholen Sie den identischen Test und verlangen Sie Marker-Abwesenheit.
  8. Verifizieren Sie unabhängig die installierte Plugin-Version und den gepatchten Quellcode.

Versionsprüfung:

root@kitploit:~
wp plugin get give --fields=name,status,version

Behebung und Incident-Überprüfung

Aktualisieren Sie GiveWP auf die neueste unterstützte Version. Nach der Aktualisierung:

  • Leeren Sie PHP-Opcode-Caches, wo zutreffend.
  • Bestätigen Sie, dass keine ältere GiveWP-Kopie aktiv oder webzugänglich bleibt.
  • Überprüfen Sie unerwartete WordPress- oder Spenderkonten.
  • Durchsuchen Sie Benutzermetadaten und GiveWP-Sitzungen nach serialisierten TCPDF-, Symfony-Session- oder loadedProviders-Graphen.
  • Korrelieren Sie Registrierung, Profiländerungen, Spendenanfragen und nachfolgende HTTP-500-Antworten aus derselben Sitzung.
  • Untersuchen Sie unerwartete Webserver-Kindprozesse oder Dateisystemänderungen.

Wenn eine internetexponierte verwundbare Installation Objektinjektions-Artefakte enthält, behandeln Sie sie als potenzielle Kompromittierung und nicht nur als Plugin-Aktualisierung.

Repository-Struktur

root@kitploit:~
.
├── .github/workflows/validate.yml
├── .gitignore
├── README.md
├── SECURITY.md
├── docker-compose.yml
├── lab
├── poc
│   ├── direct-pop-control.php
│   └── poc.py
└── scripts
    └── fetch-assets.sh

Nicht eingecheckt:

root@kitploit:~
offizielle Plugin-ZIPs
extrahierte GiveWP-Quellen
instrumentierte Zielquellen
Cookies oder Sitzungsdaten
Laufzeitbeweise/Protokolle
interne Zieladressen oder wiederverwendbare Anmeldedaten
veraltete objcopy-Nutzlasten
historische Validierungsausgaben

Validierungsgrenzen

BehauptungStatus
Persistenter PHP-Objektinjektions-TrägerNachgewiesen
Wiederbelebung der mitgelieferten KlassenNachgewiesen
Vollständige Stock-POP-KetteNachgewiesen
Fester Marker als Web-Benutzer ausgeführtNachgewiesen
Reproduktion gegen unverändertes 4.16.5.1Nachgewiesen
Negativkontrollen gegen unverändertes 4.16.7.2Nachgewiesen
Jede Zwischenversion als betroffen getestetNicht getestet
Root-PrivilegNicht beansprucht
Container-AusbruchNicht getestet
Host-KompromittierungNicht getestet

Der Beweisstandard ist bewusst streng: Nur ein beobachtbarer Befehlsmarker durch die unveränderte Stock-Kette wird als RCE bezeichnet. HTTP-Akzeptanz, Serialisierung, Ausnahmen und Detektor-Treffer sind Zwischenbeweise.

Tool herunterladen