1. Executive summary
WordPress Core is affected by a critical interpretation conflict vulnerability (CVE-2026-63030, CVSS 9.8 CRITICAL) in the REST API batch endpoint, which is actively being exploited in the wild and was added to the CISA KEV on 2026-07-21. When chained with a medium-severity SQL injection flaw (CVE-2026-60137, CVSS 5.9 MEDIUM, also in CISA KEV) in the WP_Query author__not_in parameter, unauthenticated attackers can achieve remote code execution on default WordPress installations without requiring plugins or user interaction. EMEA financial services organisations running WordPress versions 6.9.0–6.9.4 or 7.0.0–7.0.1 for public-facing websites, customer portals, or internal CMS platforms face immediate risk of complete system compromise, credential exfiltration, and downstream lateral movement.
2. Regulatory framing
| Article | Trigger (the fact in this item) | Practical impact |
|---|---|---|
| DORA Art. 19: reporting of major ICT-related incidents to competent authorities | Active in-the-wild exploitation of a CVSS 9.8 unauthenticated RCE chain against internet-facing CMS infrastructure, with confirmed mass exploitation and backdoor deployment within 24h of disclosure. | Financial entities running vulnerable WordPress instances that are compromised may need to classify and report as a major ICT-related incident under DORA Art. 19, particularly if the CMS hosts customer-facing services or processes sensitive data. |
| DORA Art. 24: digital operational resilience testing — general requirements | The vulnerability affects a widely deployed open-source CMS component; Cloudflare confirmed the vulnerable code path is reached when a persistent object cache is not in use, meaning default configurations are affected. | Organisations should verify whether their WordPress deployments fall within the affected version range and test exposure as part of operational resilience testing obligations. |
| NIS2 Art. 23: incident reporting obligations | Active exploitation of critical RCE chain with confirmed compromise of internet-facing systems across organisations of every size and vertical. | In-scope NIS2 entities that experience compromise of WordPress-hosted services may have incident notification obligations under Art. 23. |
3. Technical analysis & attack chain
Vulnerability mechanism
CVE-2026-63030 (CVSS 9.8, CWE-436 — Interpretation Conflict) is a REST API batch-route confusion vulnerability introduced in WordPress 6.9. The flaw exists in the batch endpoint at /?rest_route=/batch/v1 (also reachable as /wp-json/batch/v1). When processing batched sub-requests, a route confusion flaw causes the arrays containing sub-requests, validation results, and matched handlers to become misaligned. WordPress loses track of which requests have been properly validated and treats all requests as trusted — including those it should block. This allows an unauthenticated attacker to bypass security validation on individual sub-requests within the batch.
CVE-2026-60137 (CVSS 5.9, CWE-89 — SQL Injection) is a SQL injection vulnerability in the author__not_in (rendered as author_exclude) parameter of WP_Query, present in WordPress 6.8.0 and later. It is exploitable when a plugin or theme passes untrusted input to this parameter. On its own it is a medium-severity SQLi; when chained with CVE-2026-63030's validation bypass, the SQLi becomes reachable by an unauthenticated attacker through the REST API batch endpoint.
Note on CVSS discrepancy: Rapid7's blog initially reported a CVSS score of 7.5 for CVE-2026-63030, citing the GitHub Security Advisory. The VERIFIED REFERENCE DATA assigns CVSS 9.8 CRITICAL (vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H). We use the verified 9.8 assessment. The 7.5 vector (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) visible in NVD likely reflects an earlier or alternative scoring that considered only the route confusion in isolation without the RCE chain impact.
Affected versions
| WordPress branch | Affected versions | Fixed version | CVE-2026-63030 | CVE-2026-60137 |
|---|---|---|---|---|
| Prior to 6.8 | Not affected | N/A | No | No |
| 6.8 | 6.8.0–6.8.5 | 6.8.6 | No (introduced in 6.9) | Yes (standalone SQLi only) |
| 6.9 | 6.9.0–6.9.4 | 6.9.5 | Yes | Yes |
| 7.0 | 7.0.0–7.0.1 | 7.0.2 | Yes | Yes |
| 7.1 Beta | Affected beta versions | 7.1 Beta 2 | Yes | Yes |
The full unauthenticated RCE chain is only achievable on 6.9.x and 7.0.x installations because CVE-2026-63030 was introduced in WordPress 6.9. WordPress 6.8.x is affected by CVE-2026-60137 as a standalone SQL injection issue only.
Preconditions
- No authentication required.
- No user interaction required.
- No plugins or themes required — exploitable against a stock/default WordPress installation.
- The WordPress REST API must be exposed (default behaviour).
- Cloudflare reported that the vulnerable code path is reached when a persistent object cache is not in use — meaning default installations without a persistent object cache (e.g., Redis, Memcached) are vulnerable.
Confirmed attack chain
- Initial access — REST API batch endpoint: The attacker sends an unauthenticated HTTP POST request to
/?rest_route=/batch/v1withContent-Type: application/json. The request body contains a nested batch of sub-requests. The outer batch structure exploits the route confusion flaw (CVE-2026-63030), causing WordPress to misalign validation results and treat untrusted sub-requests as validated. - SQL injection via WP_Query: Within the batch, a crafted GET sub-request targets
/wp/v2/posts/999999with theauthor_excludeparameter set to a SQL injection payload. The parameter nameauthor_excludemaps toauthor__not_ininWP_Query. The injection closes the existing query parenthesis with0)and appends aUNION SELECTstatement. The route confusion ensures this sub-request bypasses input validation that would normally sanitise or block it. - Verification query (observed in honeypots): The first-stage payload is a reconnaissance query that injects a
UNION SELECTreturning a row containing the string||OK||(hex-encoded as0x7c7cdelimiters aroundHEX(CAST((SELECT 0x4f4b)AS CHAR))). This confirms SQL injection is possible. The hex value0x4f4bdecodes toOK. - Payload delivery — PHP webshell injection: The second-stage query uses the same
UNION SELECTmechanism but injects a PHP payload into a WordPress post. The injected PHP code: - Setserror_reporting(0)andini_set('display_errors', 0)to suppress errors. - Requires a key parameterpmatching the value94uh9ubh6e1xto activate; otherwise returns a legitimate-looking HTTP 404 page. - Accepts commands via either abparameter (base64-decoded usingbase64_decode, with the function name obfuscated via hex escapes:\x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65) or acparameter (raw). - Attempts command execution viasystem()(hex-obfuscated as\x73\x79\x73\x74\x65\x6d), falling back topassthru()(hex-obfuscated as\x70\x61\x73\x73\x74\x68\x72\x75), thenexec()(hex-obfuscated as\x65\x78\x65\x63). - Captures output viaob_start()/ob_get_clean(). - Post-exploitation (observed by watchTowr): After successful exploitation, threat actors have been observed: - Exfiltrating hashed credentials. - Creating backdoor administrator accounts (watchTowr observed more than 100 backdoor accounts created by different threat actors using variations of public tooling). - Deploying fake WordPress plugins to achieve persistent RCE, exfiltrate credentials/secrets, or download additional tooling. - In at least one case, attempting to download Overlord RAT, a Golang-based remote access trojan.
Exploitation timeline
- 2026-07-17: WordPress released security updates and GitHub Security Advisories. Searchlight Cyber researcher Adam Kues published initial research (without technical specifics) and launched wp2shell.com checker. CVE-2026-60137 was discovered and disclosed by researchers TF1T, dtro, and haongo.
- 2026-07-17 (evening): PatchStack confirmed in-the-wild exploitation of both CVEs.
- 2026-07-18 (early hours): watchTowr reported successful exploitation was well underway, initially using public exploit code to exfiltrate hashed credentials, with RCE following once additional details became public.
- 2026-07-20: Searchlight Cyber published full technical breakdown. SANS ISC reported exploit attempts hitting honeypots. VulnCheck verified more than two dozen unique proof-of-concept exploits targeting wp2shell. ANSSI France (CERT-FR) published alert CERTFR-2026-ALE-007.
- 2026-07-21: Both CVEs added to CISA KEV.
Attribution
No named threat actor with a confirmed MITRE ATT&CK profile has been identified in the source material as responsible for the exploitation. watchTowr observed multiple distinct threat actors using variations of public exploit tooling. The reference to Overlord RAT is a single-sourced observation from watchTowr; attribution to any specific actor group is unconfirmed.
Confidence caveats
- The exploit payload details (webshell injection, command execution fallback chain) are corroborated by SANS ISC honeypot data and SecurityOnion capture (corpus-3), and are consistent with the attack chain described by Tenable (corpus-5) and The Register (corpus-4). Multi-source corroborated.
- The observation of Overlord RAT deployment is single-sourced to watchTowr via The Register (corpus-4). Verify before enforcement.
- The claim that AI models assisted threat actors in reproducing exploits is attributed to Jake Knott of watchTowr via The Register (corpus-4). This is an assessment, not a confirmed fact. Single-sourced; treat as unconfirmed.
4. Mitigation & containment
P1 — Within 24 hours
- Patch all WordPress installations to the fixed version for their branch: - WordPress 6.9.x → upgrade to 6.9.5 - WordPress 7.0.x → upgrade to 7.0.2 - WordPress 7.1 Beta → upgrade to 7.1 Beta 2 - WordPress 6.8.x → upgrade to 6.8.6 (addresses CVE-2026-60137 standalone SQLi)
WordPress has enabled forced auto-updates for affected versions. Administrators should verify each internet-facing WordPress site has successfully upgraded — do not assume auto-update succeeded.
- Inventory and enumerate: Identify all WordPress installations across the estate, including those managed by third parties, hosted on external providers, or used for internal purposes. Check each against the affected version ranges. Use the checker at
https://wp2shell.comor authenticated vulnerability scans (Rapid7 InsightVM/Nexpose content release July 20, 2026 includes checks). - Assume compromise for unpatched internet-facing instances: If an affected WordPress installation has been internet-facing since 2026-07-17 and is not confirmed patched, treat it as potentially compromised. Perform forensic triage: - Review WordPress admin accounts for unauthorised additions (check
wp_userstable for accounts created after 2026-07-17). - Review installed plugins for suspicious or unrecognised additions (fake plugin directories). - Search for injected PHP payloads in post content (searchwp_poststable forerror_reporting,base64_decode,system,passthru,exec). - Check web server access logs for POST requests to/?rest_route=/batch/v1or/wp-json/batch/v1withUser-Agent: cve-2026-63030/1.0or similar. - Look for the webshell key94uh9ubh6e1xin filesystem and database. - Block exploit traffic at WAF/reverse proxy: Block or rate-limit unauthenticated POST requests to
/?rest_route=/batch/v1and/wp-json/batch/v1containingauthor_excludeparameters with SQL injection patterns (UNION SELECT, hex-encoded strings). If the REST API batch endpoint is not required, block it entirely for unauthenticated users.
P2 — Within 72 hours
- Restrict REST API exposure: If the WordPress REST API is not required for site functionality, disable it or restrict access to authenticated users only. This can be achieved via: -
.htaccessrules blocking/wp-json/and/?rest_route=for unauthenticated requests. - Security plugins that restrict REST API access. - Reverse proxy rules. - Enable persistent object cache: Cloudflare confirmed the vulnerable code path is reached when a persistent object cache is not in use. Enable Redis or Memcached as a persistent object cache backend for WordPress. This is a mitigation, not a replacement for patching.
- Audit WordPress admin accounts: Review all administrator-level accounts. Remove any unrecognised accounts. Reset passwords for all admin accounts on any instance that was vulnerable and internet-facing.
- Scan for fake plugins: Inspect
wp-content/plugins/for directories that were not intentionally installed. Cross-reference against deployment records. - Hunt for webshell artefacts: Search the entire web root for PHP files containing the strings
94uh9ubh6e1x,error_reporting(0), or hex-obfuscated function calls matching the pattern\x73\x79\x73\x74\x65\x6d(system),\x70\x61\x73\x73\x74\x68\x72\x75(passthru),\x65\x78\x65\x63(exec).
P3 — Within 7 days
- Verify auto-update success: For all WordPress instances with auto-updates enabled, confirm the version is now 6.9.5, 7.0.2, or later. Document verification.
- Review hosting provider patches: If WordPress is managed by a hosting provider, confirm they have applied the fix. Some hosted installations receive patches automatically; self-managed installations require manual action.
- Implement continuous WordPress monitoring: Deploy integrity monitoring for WordPress core files, plugin directories, and the
wp_userstable. Alert on unauthorised file additions or admin account creation. - Review CISA KEV remediation dates: CVE-2026-63030 has a CISA KEV due date of 2026-07-24. CVE-2026-60137 has a due date of 2026-08-04. While these are binding on US federal agencies, EMEA financial services should treat them as authoritative urgency indicators.
5. Indicators of compromise
| Type | Value | Confidence | Source |
|---|---|---|---|
| User-Agent | cve-2026-63030/1.0 |
High | SANS ISC honeypot capture |
| HTTP endpoint | POST /?rest_route=/batch/v1 |
High | SANS ISC, Tenable |
| HTTP endpoint | POST /wp-json/batch/v1 |
High | Tenable, SANS ISC |
| SQLi pattern | author_exclude=0) UNION SELECT in REST API request |
High | SANS ISC |
| Webshell key | 94uh9ubh6e1x |
High | SANS ISC exploit capture |
| Webshell parameter | p (key), b (base64 command), c (raw command) |
High | SANS ISC exploit capture |
| Hex-obfuscated function | \x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65 (base64_decode) |
High | SANS ISC exploit capture |
| Hex-obfuscated function | \x73\x79\x73\x74\x65\x6d (system) |
High | SANS ISC exploit capture |
| Hex-obfuscated function | \x70\x61\x73\x73\x74\x68\x72\x75 (passthru) |
High | SANS ISC exploit capture |
| Hex-obfuscated function | \x65\x78\x65\x63 (exec) |
High | SANS ISC exploit capture |
| SQLi verification marker | \|\|OK\|\| (0x7c7c ... 0x7c7c) |
High | SANS ISC exploit capture |
| Malware | Overlord RAT (Golang-based RAT) | Low — single-sourced | watchTowr via The Register |
useragent cve-2026-63030/1.0
http_endpoint POST /?rest_route=/batch/v1
http_endpoint POST /wp-json/batch/v1
sqli_pattern author_exclude=0) UNION SELECT
webshell_key 94uh9ubh6e1x
webshell_param p
webshell_param b
webshell_param c
hex_obfuscated \x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65
hex_obfuscated \x73\x79\x73\x74\x65\x6d
hex_obfuscated \x70\x61\x73\x73\x74\x68\x72\x75
hex_obfuscated \x65\x78\x65\x63
sqli_marker ||OK||
malware Overlord RAT
Behavioural indicators
| Behaviour | Where to observe | Confidence |
|---|---|---|
Unauthenticated POST to REST API batch endpoint with nested sub-requests containing author_exclude SQLi payloads |
Web server access logs, WAF logs, SIEM | High |
| Creation of new WordPress admin accounts from unauthenticated context | WordPress wp_users table, database audit logs |
High |
Appearance of unrecognised plugin directories in wp-content/plugins/ |
Filesystem integrity monitoring, WordPress admin dashboard | High |
PHP webshell responding with HTTP 404 when key parameter p is absent or incorrect |
Web server access logs (200 vs 404 patterns for same URI), WAF | Medium |
| Outbound connections from web server to download additional tooling post-exploitation | EDR, network firewall logs, DNS logs | Medium |
6. Detection
rule wp2shell_webshell_PHP {
meta:
author = "Adverse Trace"
date = "2026-07-22"
reference = "https://isc.sans.edu/diary/rss/33168"
description = "Detects wp2shell injected PHP webshell payload with hex-obfuscated execution functions"
strings:
$key = "94uh9ubh6e1x"
$b64 = "\\x62\\x61\\x73\\x65\\x36\\x34\\x5f\\x64\\x65\\x63\\x6f\\x64\\x65"
$system = "\\x73\\x79\\x73\\x74\\x65\\x6d"
$passthru = "\\x70\\x61\\x73\\x73\\x74\\x68\\x72\\x75"
$exec = "\\x65\\x78\\x65\\x63"
$err_rep = "error_reporting(0)"
$ini_set = "ini_set(\\'display_errors\\',0)"
$ob_start = "ob_start()"
$ob_clean = "ob_get_clean()"
$http404 = "404 Not Found"
$param_p = "$_REQUEST[\"p\"]"
$param_b = "$_REQUEST[\"b\"]"
$param_c = "$_REQUEST[\"c\"]"
condition:
$key and ($err_rep or $ini_set) and 2 of ($b64, $system, $passthru, $exec) and ($ob_start or $ob_clean)
}
title: Detect wp2shell CVE-2026-63030 REST API Batch Exploitation
id: 7a3c1f2e-2026-0722-at366
status: experimental
description: Detects unauthenticated POST requests to WordPress REST API batch endpoint containing SQL injection patterns consistent with wp2shell exploit chain
author: Adverse Trace
date: 2026/07/22
references:
- https://isc.sans.edu/diary/rss/33168
- https://www.tenable.com/blog/wp2shell-cve-2026-63030-cve-2026-60137-frequently-asked-questions-about-remote-code-execution
logsource:
category: webserver
product: apache/nginx/iis
detection:
selection_endpoint:
c-uri|contains:
- "/?rest_route=/batch/v1"
- "/wp-json/batch/v1"
http_method: "POST"
selection_sqli:
c-uri|contains:
- "author_exclude="
- "UNION SELECT"
selection_ua:
user-agent|contains: "cve-2026-63030"
condition: selection_endpoint and (selection_sqli or selection_ua)
fields:
- src_ip
- dst_ip
- c-uri
- user-agent
- http_method
- http_status
falsepositives:
- Legitimate batch API usage with unusual query parameters (unlikely)
- Security scanner testing for wp2shell vulnerability
level: critical
title: Detect wp2shell Webshell Access Pattern
id: 8b4d2g3f-2026-0722-at366
status: experimental
description: Detects HTTP requests consistent with wp2shell injected webshell accessing commands via p, b, or c parameters
author: Adverse Trace
date: 2026/07/22
references:
- https://isc.sans.edu/diary/rss/33168
logsource:
category: webserver
product: apache/nginx/iis
detection:
selection_key:
c-uri|contains: "p=94uh9ubh6e1x"
selection_params:
c-uri|contains:
- "&b="
- "&c="
condition: selection_key or (selection_key and selection_params)
fields:
- src_ip
- dst_ip
- c-uri
- http_status
- user-agent
falsepositives:
- Unlikely — key string is unique to this webshell
level: critical
CVE assessment
2 referenced CVEs — 2 actively exploited (CISA KEV), 1 critical (CVSS ≥ 9.0)
| CVE | CVSS | Exploited | EPSS | Summary |
|---|---|---|---|---|
| CVE-2026-63030 | 9.8 Critical | ⚠ KEV 2026-07-21 | 9% | WordPress 6.9.x before 6.9.5 and 7.0.x before 7.0.2 is affected by a REST API batch endpoint route confusion issue which, combi… |
| CVE-2026-60137 | 5.9 Medium | ⚠ KEV 2026-07-21 | 4% | WordPress 6.8.x before 6.8.6, 6.9.x before 6.9.5, and 7.0.x before 7.0.2 does not properly sanitise the author__not_in paramete… |
7. Sources
- NVD, CVE-2026-63030 Detail, https://nvd.nist.gov/vuln/detail/CVE-2026-63030, 2026-07-21
- NVD, CVE-2026-60137 Detail, https://nvd.nist.gov/vuln/detail/CVE-2026-60137, 2026-07-21
- CISA, Known Exploited Vulnerabilities Catalog — CVE-2026-63030 (added 2026-07-21, due 2026-07-24), https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- CISA, Known Exploited Vulnerabilities Catalog — CVE-2026-60137 (added 2026-07-21, due 2026-08-04), https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- Rapid7, "CVE-2026-63030: wp2shell a Critical Remote Code Execution Vulnerability in WordPress Core", https://www.rapid7.com/blog/post/etr-cve-2026-63030-wp2shell-a-critical-remote-code-execution-vulnerability-in-wordpress-core, 2026-07-17
- SANS Internet Storm Center, "WordPress Exploitation Underway (CVE-2026-63030)", https://isc.sans.edu/diary/rss/33168, 2026-07-20
- The Register, "Attackers pummel critical WordPress vuln to create all sorts of mischief", https://www.theregister.com/security/2026/07/20/attackers-pummel-critical-wordpress-vuln-to-create-all-sorts-of-mischief/5275265, 2026-07-20
- Tenable Research, "wp2shell (CVE-2026-63030, CVE-2026-60137): Frequently asked questions about remote code execution chain in WordPress Core", https://www.tenable.com/blog/wp2shell-cve-2026-63030-cve-2026-60137-frequently-asked-questions-about-remote-code-execution, 2026-07-20
- ANSSI France CERT-FR, "Multiples vulnérabilités dans WordPress", https://www.cert.ssi.gouv.fr/alerte/CERTFR-2026-ALE-007/, 2026-07-20
8. Adverse Trace position
Severity: CRITICAL. CVE-2026-63030 (CVSS 9.8) is a confirmed unauthenticated RCE chain in WordPress Core — a product running approximately 40% of all websites. Both CVEs in the chain are in CISA KEV with active exploitation confirmed by multiple independent sources (SANS ISC, watchTowr, PatchStack, VulnCheck, Hexastrike). The attack requires no authentication, no plugins, and no user interaction; it works against default installations. Public proof-of-concept code is circulating, and VulnCheck has verified more than two dozen unique exploits. watchTowr has observed 100+ backdoor accounts created by multiple threat actors and at least one attempt to deploy Overlord RAT (single-sourced; verify before enforcement). EMEA financial services clients should treat any unpatched, internet-facing WordPress instance in the affected version range as presumptively compromised and initiate incident response procedures immediately. Adverse Trace is monitoring for additional threat actor tooling, new IOCs, and any confirmed attribution. We will issue updates if the threat landscape materially changes or if additional IOCs are corroborated.
Published via PulseTrace — Adverse Trace threat intelligence.