
CVE-2026-63030 / CVE-2026-60137 - WordPress Pre-Auth RCE-Scanner
von @bahartanir (katherinepierce) Fork von ZephrFish/wp2shell-scanner mit zusätzlichen Verbesserungen. Forschung von Adam Kues (Assetnote) und Mustafa Can İPEKÇİ (nukedx).
Erkennungs- und Validierungswerkzeuge für die Offenlegung des WordPress-Kerns gegenüber wp2shell (CVE-2026-63030 / CVE-2026-60137). Modi werden mit einem Flag ausgewählt, und das Ziel ist positional. --scan erstellt einen Fingerabdruck der Kernversion und bestätigt, dass die REST /batch/v1-Route erreichbar ist, ohne eine Exploit-Nutzlast zu senden; die Modi --check/--read/--shell/--rce/--root-prereq sind die Validierungs-PoC für autorisierte Labornutzung.
wp2shell.py ist ein einzelnes Skript, das nur die Standardbibliothek verwendet – keine externen Abhängigkeiten. Jeder Aufruf gibt das Banner vor der Ausführung auf stderr aus (es bleibt von stdout fern, sodass die JSON-Ausgabe von --scan -j nicht beeinträchtigt wird).
Es ist genau ein Modusflag erforderlich; das Ziel ist positional (eine URL für jeden Modus oder eine Hostliste für --scan).
wp2shell.py (--scan | --check | --read | --shell | --rce | --root-prereq)
[targets ...] [-f FILE] [-j] [-t THREADS] [--prefix PREFIX]
[--delay DELAY] [--repeats REPEATS] [--preset PRESET] [--expr EXPR]
[--max-len MAX_LEN] [--user USER] [--password PASSWORD] [--cmd CMD]
[-i] [--no-cleanup] [-y] [--sleep SLEEP] [--rounds ROUNDS]
[--route {auto,rest-route,wp-json}] [--proxy PROXY] [--authorized]
[--timeout TIMEOUT]
Ursprünglicher Deep Dive: https://blog.zsec.uk/wp2shell-code-trace-deep-dive/
nuclei -t wp2shell-exposure.yaml -u https://target
Einzelner Host, mehrere Hosts oder eine Datei.
python3 wp2shell.py --scan https://target
python3 wp2shell.py --scan host1 host2 host3
python3 wp2shell.py --scan -f hosts.txt
Optionen: -f/--file Hosts-Datei (eine pro Zeile), -j/--json JSON-Ausgabe, -t/--threads Gleichzeitigkeit (Standard 10).
Die Modi --check/--read/--shell/--rce/--root-prereq senden Live-Exploit-Nutzlasten. Führen Sie sie nur gegen das mitgelieferte localhost-Labor oder andere Systeme aus, die Ihnen gehören und für die Sie ausdrücklich autorisiert sind zu testen. --shell und --rce führen Remote-Code-Ausführung durch und sind für das Labor/autorisierte Ziele vorgesehen; --rce auf einem Nicht-Loopback-Host erfordert --authorized. --root-prereq verwendet dasselbe token-gesteuerte Diagnose-Plugin, um Shell-zu-Root-Voraussetzungen zu prüfen, führt jedoch keine lokale Privilegieneskalation durch.
--shell benötigt ein wiederhergestelltes/geknacktes Admin-Passwort. --rce ist die anmeldeinformationslose Pre-Auth-Kette: Es fälscht seinen eigenen Administrator über das SQLi (oEmbed → changeset → re-entrant parse_request), stellt dann die Webshell bereit – kein Passwort erforderlich.
--shell, --rce und --root-prereq fordern vor dem Senden einer Code-Ausführungs-Nutzlast zur interaktiven y/N-Autorisierung auf (sie brechen bei nicht-interaktivem/EOF stdin ab). Übergeben Sie -y/--yes, um die Eingabeaufforderung für die Automatisierung gegen das Labor oder ein autorisiertes Ziel zu überspringen.
docker compose -f poc/lab/docker-compose.yml up -d
python3 wp2shell.py --check http://127.0.0.1:8080
python3 wp2shell.py --read http://127.0.0.1:8080 --expr @@version
python3 wp2shell.py --shell http://127.0.0.1:8080 --user admin --password 'Summer2026!' --cmd id
python3 wp2shell.py --shell http://127.0.0.1:8080 --user admin --password 'Summer2026!' -i
python3 wp2shell.py --rce http://127.0.0.1:8080 --cmd id
python3 wp2shell.py --rce http://127.0.0.1:8080 -i
python3 wp2shell.py --root-prereq http://127.0.0.1:8080 --user admin --password 'Summer2026!'
python3 wp2shell.py --lpe http://127.0.0.1:8080
Patch-Diffs, die zur Untermauerung des PoC verwendet werden, sind unter poc/diffs/ gespeichert, mit Forschungsnotizen in poc/RESEARCH.md. Das SQLi ist vollständig aus dem author__not_in-Fix rekonstruierbar. Die anmeldeinformationslose --rce-Kette (oEmbed → changeset → re-entry → Admin-Erstellung) reproduziert die standardmäßige RCE gegen das gebündelte Labor; --shell ist der alternative Pfad über eine wiederhergestellte/geknackte Admin-Anmeldeinformation für authentifizierten Plugin-Upload und Befehlsausführung.
--lpe)--lpe verkettet die vollständige Pre-Auth RCE (SQLi → Admin-Fälschung → Webshell) mit einem automatisierten Root-Eskalationsversuch. Es versucht Folgendes der Reihe nach und stoppt beim ersten Erfolg:
python3 wp2shell.py --lpe http://127.0.0.1:8080
python3 wp2shell.py --lpe http://127.0.0.1:8080 -y # skip auth prompt
python3 wp2shell.py --lpe https://target --authorized # non-loopback
--lpe auf einem Nicht-Loopback-Ziel erfordert --authorized. Im gebündelten Labor (Ubuntu 22.04 Basis-Image mit einem verwundbaren GameOverlay-Kernel) gelingt CVE-2023-2640/32629 ohne Compiler.
| Flag | Funktion |
|---|
--scan | Nicht-destruktiver Offenlegungs-Check: Versions-Fingerabdruck + bestätigt, dass die REST /batch/v1-Route erreichbar ist. Keine Exploit-Nutzlast gesendet. |
--check | Bestätigt blindes zeitbasiertes SQLi mit einer harmlosen differentiellen Sonde. |
--read | Extrahiert Daten über blindes SQLi (ein voreingestellter oder ein roher SQL-Skalarausdruck). |
--shell | Authentifizierte RCE-Kette unter Verwendung eines geknackten/wiederhergestellten Admin-Passworts. |
--rce | Anmeldeinformationslose Pre-Auth RCE: fälscht eigenen Admin über SQLi, stellt dann eine selbstreinigende Webshell bereit. |
--root-prereq | Harmlose Shell-zu-Root-Voraussetzungsprüfung; führt nur Diagnosen durch, niemals eine lokale Privilegieneskalation. |
--lpe | Vollständige Kette: Pre-Auth SQLi → Admin-Fälschung → Webshell → Root. Versucht CVE-2023-2640/32629 (GameOverlay overlayfs), CVE-2023-4911 (Looney Tunables glibc), CVE-2026-31431 (AF_ALG Copy Fail), CVE-2026-23111 (nf_tables UAF-Probe), dann SUID/sudo/cap-Fallback. |
| Flag | Anwendbar auf | Funktion |
|---|
-f, --file | --scan | Liest Hosts aus einer Datei (eine pro Zeile; #-Kommentare werden übersprungen). |
-j, --json | --scan | Gibt Ergebnisse als JSON auf stdout aus. |
-t, --threads | --scan | Scan-Gleichzeitigkeit (Standard 10). |
--prefix | --check/--read | DB-Tabellenpräfix (Standard wp_). |
--delay | --check/--read | Eingefügte SLEEP-Sekunden für das Timing-Orakel (Standard 0,15). |
--repeats | --check/--read | Median über N Sonden pro Bit; bei verrauschten Verbindungen erhöhen (Standard 1). |
--preset | --read | Integriertes Ziel: version, database, db_user, users, siteurl (Standard users). |
--expr | --read | Roher SQL-Skalarausdruck zum Extrahieren (überschreibt --preset). |
--max-len | --read | Maximale extrahierte Zeichenfolgenlänge (Standard 128). |
--user | --shell/--root-prereq | Admin-Benutzername zum Einloggen (Standard admin). |
--password | --shell/--root-prereq | Klartext-Admin-Passwort (Hash aus --read knacken; für diese Modi erforderlich). |
--cmd | --shell/--rce | Befehl, der auf dem Ziel ausgeführt werden soll (Standard id). |
-i, --interactive | --shell/--rce | Interaktive Web-Befehlsschleife anstelle eines einzelnen Befehls. |
--no-cleanup | --shell/--rce | Lässt das abgelegte Plugin/Webshell an Ort und Stelle (nur Labor). |
-y, --yes | --shell/--rce/--root-prereq | Überspringt die interaktive Autorisierungsaufforderung (für Automatisierung). |
--sleep | --rce | Eingefügte SLEEP-Sekunden für Pre-Auth SQLi-Erkennung (Standard 4). |
--rounds | --rce | Median über N Sonden für --rce-Erkennung (Standard 3). |
--route | --rce | Batch-Routenform: auto, rest-route oder wp-json (Standard auto). |
--proxy | --rce | Leitet Anfragen über einen HTTP-Proxy, z. B. Burp unter http://127.0.0.1:8080. |
--authorized | --rce | Behauptet Autorisierung für ein Nicht-Loopback---rce-Ziel (erforderlich für entfernte Hosts). |
--timeout | alle | Timeout pro Anfrage in Sekunden (Standard 15). |
| CVE | Betroffen | Technik | Compiler |
|---|
| CVE-2023-2640 / CVE-2023-32629 | Ubuntu 22.04 / 23.04, kernel < 6.3.3 with GameOverlay driver | Unprivilegierter overlayfs-Mount im Benutzer-Namespace bewahrt chmod +s auf dem oberen Verzeichnis | Keine (reine Shell) |
| CVE-2023-4911 | glibc 2.34–2.38 (Ubuntu 22.04, Debian 12, Fedora 37–38) | GLIBC_TUNABLES Stack-Überlauf in _dl_parse_tunables() → LD_PRELOAD-Injektion bei SUID-Ausführung | gcc erforderlich |
| CVE-2026-31431 | Linux kernel with algif_aead + authencesn(hmac(sha256),cbc(aes)) | AF_ALG AEAD In-Place-Optimierung + splice() schreibt 4 Bytes in den SUID-Binär-Seitencache; Voraussetzungsprobe — verlinkt zu AliHzSec/CVE-2026-31431 | gcc erforderlich |
| CVE-2026-23111 | Ubuntu 22.04 / 24.04, Debian Bookworm / Trixie | nf_tables invertierte Prüfung UAF in nft_map_catchall_activate() → chain->use Unterlauf → freigegebene Kette; Voraussetzungsprobe — verlinkt zu Baba01hacker666/CVE-2026-23111 | gcc erforderlich |
| Fallback | Beliebig | SUID GTFOBins + sudo NOPASSWD Missbrauch | Keine |