
Nicht-intrusiver Erkennungsscanner für die WordPress wp2shell Pre-Auth-RCE-Kette (CVE-2026-63030 + CVE-2026-60137). Nur Erkennung, keine Ausnutzung.
Nicht-intrusiver Erkennungsscanner für aktuelle WordPress Core-Schwachstellen – einschließlich der wp2shell Pre-Authentifizierungs-RCE-Kette.
wp2shell_scanner.py ermittelt die Core-Version einer WordPress-Seite und liest deren öffentlich beworbene REST-API-Oberfläche aus, klassifiziert dann jede verfolgte Core-CVE unabhängig gegen die erkannte Version. Die Urteile sind branch-bewusst – z. B. wird eine 6.8.x-Seite korrekt als exponiert gegenüber der SQL-Injection-CVE gemeldet, aber nicht gegenüber der vollständigen RCE-Kette. Es erkennt nur: Es wird niemals ein Exploit-Payload gesendet. Einzelne Datei, eine Abhängigkeit (requests), CI-freundliche Exit-Codes und kundenfertige HTML‑/JSON‑/E-Mail-Berichte.
⚠️ Nur autorisierte Nutzung. Scannen Sie nur Systeme, die Ihnen gehören oder für die Sie ausdrücklich (schriftlich) autorisiert sind. Der Scanner sendet einen identifizierenden
User-Agent, damit Blue Teams den Datenverkehr zuordnen können – er versteckt sich nicht.
| CVE | Schwachstelle | Zugriff | Betroffene Core-Version | Behoben in |
|---|---|---|---|---|
| CVE-2026-63030 – wp2shell | CWE-436 – REST-Batch-Routen-Konfusion → RCE (Kritisch; CVSS 9.8 WPScan CNA / 7.5 CISA-ADP; GHSA-ff9f-jf42-662q) | Nicht authentifiziert | 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.9.5, 7.0.2 |
| CVE-2026-60137 | CWE-89 – SQL-Injection in WP_Query author__not_in (Moderat alleinstehend, CVSS 5.9; Kritisch in der Kette; GHSA-fpp7-x2x2-2mjf) | Nicht authentifiziert | 6.8.0–6.8.5, 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.8.6, 6.9.5, 7.0.2 |
| CVE-2026-3906 | CWE-862 – Notes-REST-API fehlende Autorisierung (Moderat, CVSS 4.3, GHSA-6x83-fcf5-r65g) | Abonnent+ | 6.9.0–6.9.1 | 6.9.2 |
Die wp2shell-RCE-Kette = CVE-2026-63030 + CVE-2026-60137 zusammen → Pre-Auth-Fernausführung von Code auf einer Standardinstallation. Der Scanner meldet die Kette nur dann als exponiert, wenn beide CVEs für die erkannte Version als anfällig eingestuft werden.
Branch-Nuancen, die der Scanner richtig beherrscht:
6.8.x trägt die SQL-Injection (CVE-2026-60137) nur – nicht die RCE-Kette.6.9-Zweig ist CVE-2026-3906 (Notes) in 6.9.2 behoben, aber die wp2shell-Kette ist erst mit 6.9.5 geschlossen. Daher liest 6.9.2/6.9.4 gepatcht für den Notes-Fehler, bleibt aber anfällig für die RCE-Kette – der Scanner empfiehlt daher in diesem Zweig nur 6.9.5 oder später, niemals 6.9.4.Betrieblich wichtig: Technische Ausarbeitungen und ein funktionierender PoC für wp2shell sind bereits öffentlich. Die Versionserkennung ist jetzt das absolute Minimum – die Priorität liegt auf Patchen. Das Aktualisieren schließt den anfälligen Pfad, entfernt aber keine Hintertür, die vor dem Patch platziert wurde – daher der Kompromittierungsbewertungsschritt im Bericht.
Dies ist ein Core-Versionen-Scanner. Plugin- und Theme-CVEs – die große Mehrheit des WPScan‑/Patchstack-Katalogs – erfordern einen live kuratierten Feed und eine Versionen-Aufzählung pro Plugin und sind hier bewusst ausgeschlossen. Innerhalb seines Bereichs (aktuelle WordPress-Core-CVEs) zielt er darauf ab, präzise und branch-genau zu sein, anstatt eine kommerzielle Schwachstellendatenbank zu duplizieren.
<meta name="generator"> auf der Startseite/readme.html<generator>-Tag/wp-links-opml.php (OPML)/wp-json/, um zu sehen, ob WordPress den Namensraum batch/v1 im REST-Index bewirbt. Dies bestätigt, dass der Namensraum registriert ist, nicht, dass der Endpunkt durch eine WAF erreichbar ist. Es wird keine Batch-Anfrage und kein Payload gesendet.Es exploitiert nichts. Kein SQL-Injection-Payload, keine Batch-Routen-Konfusion-Anfrage, kein Versuch, Code auszuführen oder Daten zu lesen. Die Erkennung erfolgt versionsbasiert plus einem passiven Auslesen der öffentlich beworbenen API-Oberfläche.
pip install requests
# einzelnes Ziel
python3 wp2shell_scanner.py -t https://site.example --authorized
# Liste von Zielen (eines pro Zeile, #-Kommentare erlaubt)
python3 wp2shell_scanner.py -T scope.txt --authorized -o ./reports
# Vorschau der Ausgabeformate mit synthetischen Daten – kein Netzwerk, keine Authentifizierung nötig
python3 wp2shell_scanner.py --demo -o ./reports
| Flag | Bedeutung |
|---|---|
-t, --target | Einzelne Ziel-URL oder Host |
-T, --targets-file | Datei mit einem Ziel pro Zeile |
--demo | Einen BEISPIEL-Bericht/E-Mail aus synthetischen Daten generieren (kein Netzwerk) |
-o, --output-dir | Ausgabeverzeichnis (Standard ./wp2shell_reports) |
--formats | Komma-Liste: json,html,email (Standard: alle) |
--authorized | Autorisierungssperre – für Live-Scans erforderlich |
--timeout | HTTP-Timeout in Sekunden (Standard 12) |
--delay | Sekunden zwischen Zielen (höflich sein; Standard 1,0) |
--insecure | TLS-Zertifikate nicht überprüfen |
--quiet | Konsolenzusammenfassung unterdrücken |
Das Flag --authorized ist eine explizite Autorisierungssperre – Live-Scans weigern sich, ohne es auszuführen.
| Code | Bedeutung |
|---|---|
2 | Mindestens ein Ziel anfällig |
1 | Mindestens ein Ziel nicht eindeutig / Fehler |
0 | Sauber (gepatcht / nicht betroffen / kein WordPress) |
Der Empfänger der Benachrichtigungs-E-Mail ist die Konstante CSSLTD_CONTACT nahe dem Anfang des Skripts (Standard [email protected]). Bearbeiten Sie sie zu Ihrer eigenen Eingangsadresse.
| Urteil | Bedeutung |
|---|---|
VULNERABLE | Erkannte Version liegt innerhalb eines betroffenen Bereichs – sofort patchen |
PATCHED | Auf einem behobenen Release; nicht gegenüber den verfolgten CVEs exponiert |
NOT_AFFECTED | Version liegt vor dem frühesten verfolgten Fehler (< 6.8.0 – CVE-2026-60137) |
UNKNOWN | Version konnte nicht bestätigt werden, Vektoren waren uneinig oder es wurde ein Pre-Release-Build gesehen – manuell überprüfen |
NOT_WORDPRESS | Kein WordPress-Fingerabdruck gefunden |