
CVE-2026-63030 - WordPress REST-Batch-Routen-Verwechslung SQL-Injection Proof of Concept
WordPress REST Batch Route-Confusion SQL Injection (CVE-2026-63030) Proof of Concept
Recherche, Exploit-Entwicklung & Dokumentation von Ch4120N
Dieses Repository und das dazugehörige Tool (exploit.py) sind ausschließlich für Bildungszwecke, autorisierte Penetrationstests und Sicherheitsforschung bestimmt.
Die Verwendung dieses Exploits gegen Ziele ohne ausdrückliche, vorherige, schriftliche Genehmigung ist illegal und verstößt weltweit gegen Gesetze zu Computerbetrug und -missbrauch. Der Autor (Ch4120N) übernimmt keinerlei Haftung für Missbrauch, Schäden oder rechtliche Konsequenzen, die aus der Verwendung dieses Codes entstehen. Handeln Sie stets im Rahmen des Gesetzes und holen Sie die entsprechende Genehmigung ein.
CVE-2026-63030 ist eine kritische, nicht authentifizierte Schwachstelle, die die WordPress-REST-API betrifft. Sie nutzt einen Route-Confusion-Bug im verschachtelten Batch-Verarbeitungsendpunkt (/wp-json/batch/v1 oder /?rest_route=/batch/v1).
Wenn WordPress einen Batch von REST-API-Anfragen verarbeitet, validiert es jede Unteranfrage vor der Ausführung gegen ihr spezifisches Schema. Aufgrund eines Fehlers in der Art und Weise, wie der interne Routing-Zeiger absichtlich fehlerhafte Pfade (z. B. ///) verarbeitet, wird das Validierungsschema vom tatsächlichen Ausführungs-Handler desynchronisiert.
/wp/v2/users-Endpunkt abzielt (der author_exclude nicht akzeptiert), vom /wp/v2/posts-Handler ausgeführt wird. Der nicht bereinigte Parameter author_exclude wird direkt an die author__not_in-Klausel von WP_Query übergeben, was zu einer nicht authentifizierten SQL-Injection führt.oembed_cache-Beitrags-IDs zu identifizieren. Der Exploit verwendet dann eine Customizer-changeset-Payload, um den Navigationsmenü-Cache zu vergiften und WordPress dazu zu bringen, eine Benutzererstellungsanfrage im Kontext eines bestehenden Administrators auszuführen.pip install erforderlich.exploit.py) organisiert.WP_Post-Zeile (1 Anfrage pro Wert).EXTRACTVALUE()-XPATH-Fehler, wenn WP_DEBUG_DISPLAY aktiviert ist.cd-Unterstützung).Es sind keine Drittanbieter-Pakete erforderlich. Stellen Sie sicher, dass Python 3.8 oder höher installiert ist.
# Clone the repository
git clone https://github.com/Ch4120N/CVE-2026-63030.git
cd CVE-2026-63030
# Make the script executable
chmod +x exploit.py
# Verify Python version
python3 --version
# Executing the script
python3 exploit.py
Der Exploit ist in drei Hauptunterbefehle unterteilt: check, read und shell.
Diese Optionen gelten für alle Unterbefehle:
| Option | Beschreibung | Standard |
|---|---|---|
url | Ziel-Basis-URL (z. B. http://target.com) | Erforderlich |
--rest-route | Verwendet /?rest_route=/batch/v1 anstelle von /wp-json/batch/v1 (für Seiten mit deaktivierten Permalinks). | False |
--timeout | HTTP-Anfrage-Timeout in Sekunden. | 30.0 |
--proxy | HTTP/HTTPS-Proxy (z. B. http://127.0.0.1:8080). | None |
check - SchwachstellenerkennungPrüft das Ziel sicher, um das Vorhandensein der Route-Confusion-Marker zu bestätigen, und testet das SQLi-Timing, ohne Daten zu extrahieren.
| Option | Beschreibung | Standard |
|---|---|---|
--sleep | SQL-Timing-Verzögerung (Sekunden), die vom --confirm-sqli-Fallback verwendet wird. | 3.0 |
--samples | Anzahl der zu testenden Basis-/Verzögerungs-SQL-Timing-Paare. | 3 |
--confirm-sqli | Sendet eine aktive SQLi-Bestätigungs-Payload (fügt eine kleine Verzögerung hinzu). | False |
read - DatenbankextraktionExtrahiert Daten direkt über die SQL-Injection aus der Datenbank.
| Option | Beschreibung | Standard |
|---|---|---|
--preset | Schnelle Extraktionsvoreinstellungen: fingerprint (Version/Benutzer/DB) oder users (Logins/Hashes). | fingerprint |
--query | Führt einen benutzerdefinierten skalaren SQL-Ausdruck aus (z. B. "SELECT @@version"). | None |
--prefix | Präfix der Datenbanktabellen. | wp_ |
--max-length | Maximale Zeichenanzahl, die pro Wert extrahiert wird. | 128 |
--technique | Extraktionstechnik: auto, union, error oder blind. | auto |
shell - Remote Code ExecutionStellt die Webshell bereit und führt Befehle aus. Wenn keine Anmeldedaten bereitgestellt werden, löst es automatisch die Pre-Auth-Brücke zur Administratorerstellung aus.
| Option | Beschreibung | Standard |
|---|---|---|
--user | Admin-Benutzername. (Weglassen, um die Pre-Auth-Brücke zu verwenden). | None |
--password | Admin-Passwort. (Weglassen, um die Pre-Auth-Brücke zu verwenden). | None |
--cmd | Ein einzelner Befehl, der auf dem Ziel ausgeführt werden soll. | None |
-i, --interactive | Öffnet nach der Bereitstellung eine interaktive Shell (REPL). | False |
Nachfolgend finden Sie reale Beispiele des Tools in Aktion.
$ python3 exploit.py check http://vulnerable-wordpress.local --confirm-sqli