JoasASantos / php2shell-scanner
git clone https://github.com/JoasASantos/php2shell-scanner.git
Non-destructive scanner for CVE-2026-109618 / CVE-2026-109619 (PHP core RCE). Subdomain recon via crt.sh + subfinder, robust banner grabbing, version-based detection.
+29
stars, 24h · #1,308
+98
stars, 7 days · #2,203
+98
stars, 30 days · #7,296
98
★ total · +98% this week
31
forks · 0 open issues
Star history (as recorded here)
LanguagePython
License—
Created2026-10-21 (1d ago)
Last push1d ago
Watchers1
OwnerUser
GitHub topics
Links
README excerpt
# php2shell-scanner Non-destructive scanner (with opt-in probe) for **CVE-2026-109618** (RCE via OOM corruption) and **CVE-2026-109619** (RCE via stale global state) — core PHP bugs fixed in `8.2.35 / 8.3.36 / 8.4.27 / 8.5.12`. > ✅ **Verified against the official php-src advisories (2026-10-21, Critical).** > The CVE IDs and the fixed-version table below match upstream exactly. > > - CVE-2026-109618 — GHSA-w8hw-w9fx-j79w > - CVE-2026-109619 — GHSA-6wmf-4rv5-p3rp ### Affected / fixed versions | Branch | Affected | Fixed | |--------|----------|-------| | 8.2 | =8.2"` constraint only narrows branch). ### Origin / WAF bypass (`--origin-scan`) CDNs hide the origin, so a header read only shows the edge. `--origin-scan`: 1. resolves apex, `www`, non-proxied prefixes (`origin.*`, `cpanel.*`, `mail.*`…) and recon subdomains; 2. drops IPs in **Cloudflare / Imperva / Sucuri** edge ranges (IPv4 + IPv6); 3. requests each remaining **origin IP directly** with the real `Host` + SNI, reading `Server` / `X-Powered-By` / error pages straight from the origin. A direct request to an already-exposed IP. Authorized targets only. Credentialed intel adds IPs DNS never exposes, plus a PHP version from the indexed banner (flagged intel — may be stale): - `--shodan-key` / env `SHODAN_API_KEY` — hosts by `hostname: `. - `--censys-id` + `--censys-secret` / env `CENSYS_API_ID` + `CENSYS_API_SECRET` — hosts by TLS-cert / DNS name. - Any credential auto-enables `--origin-scan`. [code] ### Confidence grade | Confidence | Meaning | |-----------|---------| | `HIGH` | version from exposed phpinfo() or a PHP error page | | `MEDIUM` | version from an HTTP banner (`expose_php=On`) | | `LOW` | inference only, or behind a proxy, or a distro backport may apply | The consolidated output groups targets by severity, sorts VULNERABLE by confidence (HIGH first), and flags LOW/MEDIUM results to re-check before reporting. ## Detection logic Version comparison per branch against the `FIXED` table: - ` = fixed` → **PATCHED** - `< 8.2` (EOL) → **VULNERABLE_EOL** (no upstream patch; check distro/OSV backport) - branch above advisory range or no version → **UNKNOWN** / **SUSPECTED** ## Authorization Run only against assets you own or are **explicitly permitted** to test. The `--probe` mode can disrupt fragile workers. You are responsible for your use. ## License MIT