Full research report
WordPress Core "wp2shell" RCE flaws get public exploits, patch now
Executive assessment
The wp2shell chain is architecturally notable for making a conditionally exploitable SQL injection (CVE-2026-60137, affecting 6.8 and later, ordinarily requiring a plugin to relay untrusted input) fully unauthenticated by pairing it with a route-confusion flaw (CVE-2026-63030) introduced in the same 6.9 development cycle. This means 6.8.x installations face a high-severity database exposure but not the full pre-authentication RCE, while 6.9.x and 7.0.x sites are exposed to the complete chain โ a distinction that matters for patching prioritisation. The CVSS score divergence between WPScan's CNA assignments and CISA-ADP's supplementary scores reflects genuine disagreement about standalone versus chained impact rather than error; defenders should use CVSS 9.8 as the operational risk baseline. The exploitation timeline is the most operationally significant open question: Rapid7 recorded no exploitation at 17:45 ET on 17 July, PatchStack reported activity within approximately two hours, and watchTowr's 18 July statement of 'first signs of exploitation' suggests scanning or early opportunistic activity rather than targeted campaigns โ but this trajectory is consistent with rapid escalation and organisations should treat the patching urgency as immediate regardless of exploitation confirmation status.
What happened
On 17 July 2026 the WordPress security team issued emergency releases โ versions 6.8.6, 6.9.5, and 7.0.2 โ to address two chained vulnerabilities collectively branded 'wp2shell', discovered by Adam Kues of Searchlight Cyber. The chain allows an unauthenticated attacker to achieve remote code execution on a default WordPress installation with no plugins or special configuration required. WordPress.org enabled forced automatic updates for affected installs on the same day, and Cloudflare deployed WAF blocking rules at 17:03 UTC. By 18 July 2026 multiple proof-of-concept exploits had appeared publicly on GitHub, and security firms watchTowr and PatchStack reported early signs of active exploitation.
Affected scope
The full unauthenticated RCE chain affects WordPress Core versions 6.9.0โ6.9.4 and 7.0.0โ7.0.1, patched in 6.9.5 and 7.0.2 respectively. CVE-2026-60137 (SQL injection) additionally affects versions 6.8.0โ6.8.5, patched in 6.8.6, but cannot be chained to remote code execution on 6.8.x because the batch-route confusion flaw was introduced in version 6.9. Versions prior to 6.8 are unaffected. WordPress estimates more than 500 million public websites run on the platform.
Technical assessment
The attack chains two independent weaknesses. CVE-2026-60137 is an SQL injection in the author__not_in parameter of the WP_Query class; in isolation it requires a plugin or theme to relay untrusted input. CVE-2026-63030 is a route-interpretation conflict in the REST API's /wp-json/batch/v1 endpoint introduced in WordPress 6.9, which provides an unauthenticated pathway to trigger the internal query without any plugin intermediary. Together, the chain allows database contents including credential hashes to be extracted and โ via subsequent steps documented in public PoCs โ full remote code execution. The severity of each flaw in isolation is lower than the combined chain, which explains the CVSS divergence between the WPScan CNA and CISA-ADP assignments.
Recommended defensive actions
- Update immediately to WordPress 7.0.2 (7.0.x), 6.9.5 (6.9.x), or 6.8.6 (6.8.x); verify via Settings > Updates in the WordPress dashboard that forced auto-updates have applied
- If immediate patching is not possible, block /wp-json/batch/v1 and ?rest_route=/batch/v1 at the WAF or web server level, or install a plugin that restricts anonymous REST API access โ treat this as a temporary measure only
- Route site traffic through Cloudflare (any plan tier) to benefit from the WAF Block rules for both CVEs deployed on 17 July 2026
- Audit web server and database logs for anomalous unauthenticated POST requests to /wp-json/batch/v1 and for SQL error patterns or unexpected administrative account creations
Uncertainties and evidence gaps
- In-the-wild exploitation has been reported by watchTowr and PatchStack but has not been confirmed by CISA KEV or an independently verified forensic incident report as of 18 July 2026
- The timeline of PoC publication versus first exploitation is not precisely established; Rapid7 recorded no exploitation at 17:45 ET on 17 July while PatchStack reportedly flagged activity shortly before 19:00 ET the same day
- CVSS scores differ substantially between the WPScan CNA and CISA-ADP for both CVEs, reflecting genuine disagreement about standalone versus chained impact; defenders should treat the combined-chain CVSS 9.8 as the operational baseline
- Some public PoCs reportedly achieve pre-authentication RCE directly without hash extraction; others require credential cracking โ the reliability and exact preconditions of the simpler variant have not been independently verified
Vulnerability flow
Defender-oriented path reconstructed only from sourced report findings. Unknown stages are omitted.
Multiple public proof-of-concept exploits published on GitHub by 18 July 2026; watchTowr and PatchStack reported early signs of in-the-wild exploitation on 17โ18 July 2026; neither CVE appears in the CISA Known Exploited Vulnerabilities catalogue as of 18 July 2026
Investigation began from the BleepingComputer source article (18 July 2026) asserting both PoC publication and in-the-wild exploitation for the wp2shell chain. Initial broad searches established researcher identity, CVE assignments, and version scope. Fetching the Searchlight Cyber disclosure, Cloudflare advisory, Rapid7 ETR, and WordPress release note confirmed the patch timeline, WAF deployment, and the state of exploitation as of 17 July โ no confirmed exploitation at that point. The BleepingComputer article and VulnCheck post, both dated 18 July, then established that PoCs had emerged and that watchTowr and PatchStack were reporting early exploitation signals. NVD records were retrieved to anchor CVSS scores and confirmed neither CVE is yet in the CISA Known Exploited Vulnerabilities catalogue, providing a calibration point against the private-firm exploitation reports. GitHub GHSA advisory pages returned 404 and were excluded from citations.
- What are CVE-2026-60137 and CVE-2026-63030, and what is the scope of the wp2shell incident?Searched for CVE-2026-60137 CVE-2026-63030 WordPress wp2shell RCE 2026
Both CVEs relate to a chained pre-authentication RCE in WordPress Core; CVE-2026-63030 is the REST API batch-route confusion; CVE-2026-60137 is the SQL injection; affects WordPress 6.9.x and 7.0.x for full RCE; discovered by Adam Kues of Searchlight Cyber
why Established basic event framing, researcher identity, CVE assignments, and affected version scope before fetching primary sources
- What does the original researcher disclose about mechanism, scope, and defensive posture?Fetched the Searchlight Cyber research advisoryslcyber.io โ
Adam Kues confirmed pre-authentication RCE via the batch API on default WordPress installs; fixed in 7.0.2 and 6.9.5; full technical details withheld at disclosure time; wp2shell.com vulnerability checker released
why Primary source for the researcher's own characterisation and responsible-disclosure posture; confirmed intentional technical detail withholding
- Did Cloudflare deploy WAF protections, and does the advisory indicate exploitation status at time of publication?Fetched the Cloudflare blog advisoryblog.cloudflare.com โ
Cloudflare deployed Block rules for both CVEs on 17 July 2026 at 17:03 UTC across all plan tiers; no in-the-wild exploitation observed at publication time; coordinated with WordPress security team before public disclosure
why Confirmed WAF mitigation timeline and that coordinated disclosure preceded exploitation at that point
- What is Rapid7's exploitation likelihood assessment, and how do CVSS scores vary by authority?Fetched the Rapid7 Emergency Threat Response postrapid7.com โ
No exploitation confirmed as of 17 July 17:45 ET; Rapid7 assessed public PoC emergence as highly likely given AI-assisted code analysis; CVSS 9.8 (WPScan CNA) vs 7.5 (CISA-ADP) for CVE-2026-63030
why Independent corroboration; Rapid7's PoC-emergence prediction proved accurate within 24 hours; CVSS divergence noted
- What does the official WordPress security advisory state about affected branches, patches, and auto-update policy?Fetched the WordPress 7.0.2 release announcementwordpress.org โ
Released 17 July 2026; addresses one critical and one high flaw via GHSA-ff9f-jf42-662q and GHSA-fpp7-x2x2-2mjf; forced auto-updates enabled; backports to 6.9.5 and 6.8.6
why Vendor primary source; confirmed auto-update mechanism and that 6.8.x receives a SQL-injection-only patch
- Are public PoCs confirmed available, and what is the exploitation picture as of 18 July?Fetched the BleepingComputer article dated 18 July 2026bleepingcomputer.com โ
Multiple GitHub PoCs confirmed published; some combine hash extraction, credential cracking, and plugin upload; others claim direct pre-auth RCE; watchTowr reports 'first signs of in-the-wild exploitation'
why Established that PoC availability is credible and that exploitation signals exist; 'first signs' language indicates it is not yet confirmed mass exploitation
- Does VulnCheck corroborate exploitation intelligence from other firms?Fetched the VulnCheck blog post on wp2shellvulncheck.com โ
VulnCheck confirmed the chaining mechanism; cited PatchStack-reported exploitation beginning approximately 19:00 ET on 17 July; characterised CVE-2026-63030 as an authentication bypass enabling the SQL injection
why Second independent firm corroborating early exploitation activity; adds weight without constituting confirmed mass exploitation
- What do NVD records establish for CVSS, CWE, and CISA KEV status?Fetched NVD entries for both CVEsnvd.nist.gov โ
CVE-2026-63030: CVSS 9.8 (WPScan)/7.5 (CISA-ADP), CWE-436, no KEV listing. CVE-2026-60137: CVSS 5.9 (WPScan)/9.1 (CISA-ADP), CWE-89, no KEV listing
why Government authoritative scoring; absence from CISA KEV as of 18 July calibrates private-firm exploitation reports as early and unconfirmed rather than established
Research coverage
All 68 registered source leaves were evaluated for this run: 61 completed, 0 were unavailable, 0 failed and 7 were disabled. For this story, 3 registered sources supplied useful evidence (2 primary, 1 corroborating, 0 contextual and 0 PoC/exploit references). 58 completed sources contained no matched information for this story.
Complete source-by-source audit 68 sources
| Source | Run result | Value | Why it was useful โ or not |
|---|---|---|---|
| BleepingComputernews | ok empty0 records | Primary evidence2 matched items | Published the source report used to frame and date the event. Supplied a PoC or technical exploit reference opened and verified during focused research. |
| NVDcve | ok900 records | Primary evidence2 matched items | Supplied a vendor or government advisory opened and verified during focused research. |
| Rapid7news | ok empty0 records | Corroborating1 matched items | Supplied independent analysis opened and verified during focused research. |
| AlienVault OTXdark_web | ok10 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| CIRCL CVEcve | ok30 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| CISA Alertsnews | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| CISA KEVkev | ok1647 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Cisco PSIRTvendor_advisory | ok5307 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Cisco Talosnews | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| deepdarkCTI CVE most exploiteddeepdarkcti | ok94 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI Discorddeepdarkcti | ok7 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI exploitsdeepdarkcti | ok24 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI forumsdeepdarkcti | ok257 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI malware as a servicedeepdarkcti | ok7 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI malware samplesdeepdarkcti | ok3 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI marketsdeepdarkcti | ok127 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI phishingdeepdarkcti | ok19 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI ransomware gangsdeepdarkcti | ok661 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI RATsdeepdarkcti | ok1 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI Telegram infostealerdeepdarkcti | ok130 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI Telegram threat actorsdeepdarkcti | ok1005 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| deepdarkCTI Twitter threat actorsdeepdarkcti | ok39 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| DNSDumpster domain IOC enrichmentresearch | ok1 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Exploit-DBexploit_reference | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| FIRST EPSSepss | ok6867 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Fortinet PSIRTvendor_advisory | disabled | Disabled | Disabled in the source registry; no check was attempted. |
| GitHub topic: cveresearch | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| GitHub topic: exploitresearch | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| GitHub topic: penetration-testingresearch | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| GitHub topic: pocresearch | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| GitHub topic: vulnerabilityresearch | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| GreyNoiseexploit_reference | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| KrebsOnSecuritynews | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| LinkedIn RSS proxy feeds (disabled)research | disabled | Disabled | Disabled in the source registry; no check was attempted. |
| MalwareBazaardark_web | ok6 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Mastodon #cveresearch | ok20 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Mastodon #cybersecurityresearch | ok9 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Mastodon #exploitresearch | ok2 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Mastodon #infosecresearch | ok20 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Mastodon #malwareresearch | ok20 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Mastodon #ransomwareresearch | ok18 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Mastodon #threatintelresearch | ok9 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Mastodon #vulnerabilityresearch | ok20 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Metasploit module metadataexploit_reference | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| Microsoft MSRCvendor_advisory | ok1583 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Microsoft Securitynews | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| MISP Galaxyresearch | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| MISP threat actor galaxyactor | ok0 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Palo Alto Networks PSIRTvendor_advisory | ok25 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| ProjectDiscovery nuclei templatesexploit_reference | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| Reddit r/AskNetsec (pending API approval)research | disabled | Disabled | Disabled in the source registry; no check was attempted. |
| Reddit r/cybersecurity (pending API approval)research | disabled | Disabled | Disabled in the source registry; no check was attempted. |
| Reddit r/malware (pending API approval)research | disabled | Disabled | Disabled in the source registry; no check was attempted. |
| Reddit r/netsec (pending API approval)research | disabled | Disabled | Disabled in the source registry; no check was attempted. |
| Reddit r/ReverseEngineering (pending API approval)research | disabled | Disabled | Disabled in the source registry; no check was attempted. |
| SANS ISCnews | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| Shadowserver public aggregate honeypot observationsexploit_reference | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| Shodanresearch | ok1 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Sigma Rulesresearch | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| Sophos IOCsresearch | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| The Hacker Newsnews | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| ThreatFoxthreat_intelligence | ok100 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| UK NCSCnews | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| Unit42 IOCsresearch | ok empty0 records | Checked โ no match | The source completed but returned no records in the collection scope. |
| URLhausdark_web | ok10 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| VirusTotal Community IOC enrichmentresearch | ok4 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| VulnCheck KEVkev | ok500 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
| Vulnerability Lookupcve | ok30 records | Checked โ no match | The source completed, but none of its retained records matched this story. |
Additional verified pages 6 opened outside the registered collection
Technical references2
Repository captured from the source article as technical context; not validated as PoC or exploit code.
Repository captured from the source article as technical context; not validated as PoC or exploit code.
PoC & exploit code1
Confirms multiple GitHub PoCs published post-disclosure; cites watchTowr's observation of early in-the-wild exploitation
Vendor & gov advisories4
Official vendor advisory; confirms both CVEs, affected branches, fixed versions, and forced auto-update deployment
Confirms WAF Block rules for both CVEs deployed 17 July 2026 at 17:03 UTC across all Cloudflare plan tiers
CVSS 9.8 Critical (WPScan CNA) / 7.5 High (CISA-ADP); CWE-436 Interpretation Conflict; no KEV listing as of 18 July
CVSS 5.9 Medium (WPScan CNA) / 9.1 Critical (CISA-ADP); CWE-89 SQL Injection; no KEV listing as of 18 July
Analysis & research3
Primary researcher disclosure by Adam Kues; withholds full technical details pending wider patching; releases wp2shell.com vulnerability checker
Rapid7 emergency threat response; no exploitation confirmed as of 17 July; assesses public PoC emergence as highly likely given AI-assisted code analysis
Independent technical decomposition; cites PatchStack report of exploitation beginning approximately 19:00 ET on 17 July 2026