Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
wp2shell_scanner — Non-intrusive detection scanner for the WordPress wp2shell pre-auth RCE chain (CVE-2026-63030 + CVE-2026-60137). Detection-only, no exploitation. | Kitploit
Tools/GitHubGitHub/zi3lak/wp2shell_scanner
ReconnaissanceVulnerability ScannersVulnerability AnalysisInformation GatheringWeb SecurityPenetration Testing
GitHubzi3lak/wp2shell_scanner

wp2shell_scanner

Non-intrusive detection scanner for the WordPress wp2shell pre-auth RCE chain (CVE-2026-63030 + CVE-2026-60137). Detection-only, no exploitation.

View Repository
272 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

wp2shell_scanner

smoke License: MIT Python 3.7+ Mode: detection-only CVE-2026-63030 · CVE-2026-60137

Non-intrusive detection scanner for recent WordPress core vulnerabilities — including the wp2shell pre-authentication RCE chain.

wp2shell_scanner.py fingerprints a WordPress site's core version and reads its publicly advertised REST API surface, then classifies each tracked core CVE independently against the detected version. Verdicts are branch-aware — e.g. a 6.8.x site is correctly reported as exposed to the SQL-injection CVE but not to the full RCE chain. It detects only: no exploit payload is ever sent. Single file, one dependency (requests), CI-friendly exit codes, and client-ready HTML / JSON / e-mail reports.

⚠️ Authorised use only. Scan systems you own or are explicitly authorised (in writing) to test. The scanner sends an identifying User-Agent so blue teams can attribute the traffic — it does not hide.


Tracked vulnerabilities (WordPress core)

CVEWeaknessAccessAffected coreFixed in
CVE-2026-63030 — wp2shellCWE-436 — REST batch route confusion → RCE (Critical; CVSS 9.8 WPScan CNA / 7.5 CISA-ADP; GHSA-ff9f-jf42-662q)Unauthenticated6.9.0–6.9.4, 7.0.0–7.0.16.9.5, 7.0.2
CVE-2026-60137CWE-89 — SQL injection in WP_Query author__not_in (Moderate standalone, CVSS 5.9; Critical in-chain; GHSA-fpp7-x2x2-2mjf)Unauthenticated6.8.0–6.8.5, 6.9.0–6.9.4, 7.0.0–7.0.16.8.6, 6.9.5, 7.0.2
CVE-2026-3906CWE-862 — Notes REST API missing authorization (Moderate, CVSS 4.3, GHSA-6x83-fcf5-r65g)Subscriber+6.9.0–6.9.16.9.2

The wp2shell RCE chain = CVE-2026-63030 + CVE-2026-60137 together → pre-auth remote code execution on a default install. The scanner reports the chain as exposed only when both CVEs classify as vulnerable for the detected version.

Branch nuances the scanner gets right:

  • 6.8.x carries the SQL injection (CVE-2026-60137) only — not the RCE chain.
  • On the 6.9 branch, CVE-2026-3906 (Notes) is fixed in 6.9.2, but the wp2shell chain is not closed until 6.9.5. So 6.9.2/6.9.4 read patched for the Notes bug yet remain vulnerable to the RCE chain — the scanner therefore only recommends 6.9.5 or later on that branch, never 6.9.4.

Operationally important: technical write-ups and a working PoC for wp2shell are already public. Version detection is now the absolute minimum — the priority is patching. Updating closes the vulnerable path but does not remove a backdoor planted before the patch — hence the compromise-assessment step in the report.

Scope

This is a core-version scanner. Plugin and theme CVEs — the large majority of the WPScan / Patchstack catalogue — require a live, curated feed and per-plugin version enumeration, and are intentionally out of scope here. Within its lane (recent WordPress core CVEs), it aims to be precise and branch-accurate rather than to duplicate a commercial vulnerability database.


What the scanner does

  • Passive WordPress fingerprinting across four public version vectors:
    • <meta name="generator"> on the homepage
    • /readme.html
    • RSS / Atom feed <generator> tag
    • /wp-links-opml.php (OPML)
  • Cross-checks the vectors. If they disagree on the version, or a pre-release build (beta/RC/alpha) is seen, the verdict is forced to UNKNOWN — the scanner never reports a possibly-false Patched from conflicting evidence.
  • REST API surface discovery — reads /wp-json/ to see whether WordPress advertises the batch/v1 namespace in its REST index. This confirms the namespace is registered, not that the endpoint is reachable through a WAF. No batch request and no payload are sent.
  • Per-CVE verdict — the detected version is classified independently against each tracked CVE (branch-aware), plus outputs:
    • a client-ready HTML report (print → PDF),
    • a JSON record (pipeline/EAV-friendly),
    • a draft notification e-mail.

What it explicitly does not do

It does not exploit anything. No SQL-injection payload, no batch-route-confusion request, no attempt to execute code or read data. Detection is version-based plus a passive read of the publicly advertised API surface.


Install

pip install requests

Usage

# single target
python3 wp2shell_scanner.py -t https://site.example --authorized

# list of targets (one per line, # comments allowed)
python3 wp2shell_scanner.py -T scope.txt --authorized -o ./reports

# preview the output formats with synthetic data — no network, no auth needed
python3 wp2shell_scanner.py --demo -o ./reports

Flags

FlagMeaning
-t, --targetSingle target URL or host
-T, --targets-fileFile with one target per line
--demoGenerate a SAMPLE report/e-mail from synthetic data (no network)
-o, --output-dirOutput directory (default ./wp2shell_reports)
--formatsComma list: json,html,email (default: all)
--authorizedAuthorisation gate — required for live scans
--timeoutHTTP timeout in seconds (default 12)
--delaySeconds between targets (be polite; default 1.0)
--insecureDo not verify TLS certificates
--quietSuppress the console summary

The --authorized flag is an explicit authorisation gate — live scans refuse to run without it.

Exit codes (CI-friendly)

CodeMeaning
2At least one target vulnerable
1At least one target inconclusive / error
0Clean (patched / not affected / not WordPress)

Configuration

The notification e-mail recipient is the CSSLTD_CONTACT constant near the top of the script (default [email protected]). Edit it to your own intake address.


Verdicts

VerdictMeaning
VULNERABLEDetected version falls inside an affected range — patch immediately
PATCHEDOn a fixed release; not exposed to the tracked CVEs
NOT_AFFECTEDVersion predates the earliest tracked flaw (< 6.8.0 — CVE-2026-60137)
UNKNOWNVersion could not be confirmed, vectors disagreed, or a pre-release build was seen — verify manually
NOT_WORDPRESSNo WordPress fingerprint found

Example output

The examples/ directory contains synthetic (--demo) output for a fictional vulnerable host (example.com, WordPress 6.9.1 — exposed to all three tracked CVEs):

  • wp2shell_report_example.com.html — the client-ready HTML report
  • wp2shell_example.com.json — the JSON record
  • wp2shell_email_example.com.txt — the draft notification e-mail

These are generated from fabricated data to illustrate the report format. They are not the result of scanning any real site.


Remediation (as emitted in the report)

Download Tool