
Nicht-destruktiver Scanner für CVE-2026-109618 / CVE-2026-109619 (PHP-Core-RCE). Subdomain-Reconnaissance über crt.sh + subfinder, robustes Banner-Grabbing, versionsbasierte Erkennung.
Nicht-destruktiver Scanner (mit Opt-in-Probe) für CVE-2026-109618 (RCE via
OOM-Korruption) und CVE-2026-109619 (RCE via veraltetem globalem Zustand) — Kern-
PHP-Bugs behoben in 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12.
✅ Verifiziert gegen die offiziellen php-src-Advisories (2026-10-21, Kritisch). Die CVE-IDs und die Tabelle der behobenen Versionen unten stimmen exakt mit dem Upstream überein.
- CVE-2026-109618 — GHSA-w8hw-w9fx-j79w
- CVE-2026-109619 — GHSA-6wmf-4rv5-p3rp
| Branch | Betroffen | Behoben |
|---|---|---|
| 8.2 | < 8.2.35 | 8.2.35 |
| 8.3 | < 8.3.36 | 8.3.36 |
| 8.4 | < 8.4.27 | 8.4.27 |
| 8.5 | < 8.5.12 | 8.5.12 |
| < 8.2 | EOL — kein Upstream-Patch | Distro/OSV-Backport prüfen |
| Modus | Was er tut |
|---|---|
LOCAL | php -r für exakte Laufzeitversion, SAPI, memory_limit, post_max_size |
REMOTE | Versions-Fingerprinting via X-Powered-By / Server-Header und exponiertes phpinfo() |
PRESENCE | PHP-Erkennung ohne Version (PHPSESSID, .php-Referenzen, Redirects) |
BANNER | Robuster Raw-Socket-Banner-Grab — HEAD/GET/OPTIONS + fehlerhafte Probe, http/https, Offenlegung von Fehlerseiten |
RECON | Subdomain-Enumeration via crt.sh (Certificate Transparency) mit subfinder-Fallback/Merge, dann Fan-out-Scan auflösender Hosts |
PROBE | (Opt-in) Große Multipart-Anfragen zur Beobachtung von Worker-Instabilität — kann DoS verursachen |
git clone https://github.com/JoasASantos/php2shell-scanner.git
cd php2shell-scanner
# stdlib only — no pip deps.
# Optional recon fallback: ProjectDiscovery subfinder
# brew install subfinder (or: go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest)
# Local runtime check
python3 php2shell_scan.py --local
# Single remote target, look for exposed phpinfo()
python3 php2shell_scan.py https://example.com --phpinfo-paths
# Subdomain recon (crt.sh + subfinder) then scan, 10 threads, JSON out
python3 php2shell_scan.py example.com --recon --threads 10 -o out.json
# Recon only, no scanning
python3 php2shell_scan.py example.com --recon-only
# Target list + forced robust banner grab
python3 php2shell_scan.py -f targets.txt --banner
# OPT-IN load probe (authorized use only — DoS risk)
python3 php2shell_scan.py https://example.com --probe --probe-count 5
| Flag | Bedeutung |
|---|---|
--local | Lokaler Scan über die php-Binärdatei |
--recon | Jede Domain in Subdomains erweitern (crt.sh + subfinder), dann auflösende Hosts scannen |
--recon-only | Nur Subdomains aufzählen, kein Scannen |
--banner | Robusten Raw-Socket-Banner-Grab bei jedem Ziel erzwingen |
--phpinfo-paths | Häufig exponierte phpinfo()-Pfade prüfen |
--deep-version | Zusätzliche Versionsverfahren: PHP-Easter-Eggs + Versionsleck-Dateien (composer.json, .env, …) |
--origin-scan | Das PHP-Origin hinter Cloudflare/WAF erreichen — Direkt-zu-IP-Anfrage mit dem echten Host-Header |
--shodan-key | Shodan-API-Schlüssel für Origin-Intel (oder Env SHODAN_API_KEY); impliziert --origin-scan |
--censys-id / --censys-secret | Censys-API-Zugangsdaten (oder Env CENSYS_API_ID / CENSYS_API_SECRET); implizieren --origin-scan |
--probe | Multipart-Lasttest — DoS-Risiko, nur autorisiert |
--probe-count N | Anzahl der Probe-Anfragen (Standard 5) |
--threads N / --timeout N | Parallelität / Timeout pro Anfrage |
--insecure | TLS nicht validieren |
-o FILE / --csv FILE | JSON-/CSV-Bericht speichern |
Über die Versionsprüfung hinaus wird jedes Ziel mit passiven Signalen (aus normalen Antworten) angereichert, die das Urteil verfeinern und Fehlalarme reduzieren:
fpm, mod_php) verwenden
Request-Zustand wieder → anfällig für CVE-2026-109619; reines cgi weit
weniger.ubuntu, +deb, .el8…) — ein Backport kann beheben, ohne
die Version zu erhöhen → Konfidenz gesenkt, Hinweis „Changelog prüfen".post_max_size /
max_input_vars (OOM-Angriffsfläche für CVE-2026-109618), disable_functions.--deep-version)Wenn kein Banner-Version vorhanden ist: PHP-Easter-Eggs (?=PHPE9568F34-... → GIF/Credits
bei expose_php=On) und Versionsleck-Dateien (composer.json, .env, …;
.env PHP_VERSION = exakt, eine "php": ">=8.2"-Einschränkung grenzt nur den Branch ein).
--origin-scan)CDNs verbergen das Origin, sodass ein Header-Read nur das Edge zeigt. --origin-scan:
www, nicht-proxied Präfixe (origin.*, cpanel.*, mail.*…)
und Recon-Subdomains auf;Host + SNI an
und liest Server / X-Powered-By / Fehlerseiten direkt vom Origin.Eine direkte Anfrage an eine bereits exponierte IP. Nur autorisierte Ziele.
Mit Zugangsdaten angereicherte Intel liefert IPs, die DNS nie preisgibt, plus eine PHP-Version aus dem indexierten Banner (gekennzeichnete Intel — möglicherweise veraltet):
--shodan-key / Env SHODAN_API_KEY — Hosts nach hostname:<domain>.--censys-id + --censys-secret / Env CENSYS_API_ID + CENSYS_API_SECRET
— Hosts nach TLS-Zertifikat / DNS-Name.--origin-scan.export SHODAN_API_KEY=xxx CENSYS_API_ID=xxx CENSYS_API_SECRET=xxx
python3 php2shell_scan.py hackersec.com --origin-scan
| Vertrauen | Bedeutung |
|---|---|
HIGH | Version aus offengelegtem phpinfo() oder einer PHP-Fehlerseite |
MEDIUM | Version aus einem HTTP-Banner (expose_php=On) |
LOW | nur Rückschluss, oder hinter einem Proxy, oder ein Distro-Backport könnte zutreffen |
Die konsolidierte Ausgabe gruppiert Ziele nach Schweregrad, sortiert VULNERABLE nach Vertrauen (HIGH zuerst) und markiert LOW/MEDIUM-Ergebnisse zur erneuten Prüfung vor der Meldung.
Versionsvergleich pro Branch gegen die FIXED-Tabelle:
< fixed auf einem unterstützten Branch → VULNERABLE>= fixed → PATCHED< 8.2 (EOL) → VULNERABLE_EOL (kein Upstream-Patch; Distro/OSV-Backport prüfen)Nur gegen Assets ausführen, die Sie besitzen oder deren Testung Ihnen ausdrücklich gestattet ist. Der
--probe-Modus kann fragile Worker beeinträchtigen. Sie sind für Ihre Nutzung verantwortlich.
MIT