01
CriticalPatchedWordPress Core
WordPress patches wp2shell, an unauthenticated remote code execution chain in core that works on a bare site with no plugins
Two CVEs. One REST API batch-route confusion, one SQL injection. Chained, an anonymous HTTP request reaches code execution. A working public exploit exists. WordPress pushed automatic updates. If your site has not auto-updated, update it now.
CVEsCVE-2026-63030
CVE-2026-60137
CVE-2026-60137
AffectsWordPress 6.9.x
and 7.0.x
and 7.0.x
Fixed in6.9.5 and 7.0.2
July 17, 2026
July 17, 2026
ExploitationNo confirmed
attacks yet
attacks yet
What happened
Adam Kues of Searchlight Cyber discovered a two-vulnerability chain in WordPress core and disclosed it to the WordPress Security Team under coordinated disclosure. WordPress shipped versions 6.9.5 and 7.0.2 on July 17 and enabled forced automatic updates for supported installations. The first flaw, CVE-2026-63030, is a REST API batch-route confusion bug introduced in WordPress 6.9. The /wp-json/batch/v1 endpoint is on by default, requires no authentication, and a validation and dispatch desynchronization in the route handler allows attacker-controlled requests to bypass intended restrictions. The second flaw, CVE-2026-60137, is a SQL injection in the author__not_in parameter of WordPress core's WP_Query class. Chained, the two flaws give an anonymous HTTP request a path to remote code execution on the server. No plugins, no themes, no special configuration are required. A site running stock WordPress 6.9 or 7.0 was in range. On July 18, CVE identifiers were assigned, Searchlight Cyber published the full technical mechanism, a working proof-of-concept became public, and Rapid7 announced that authenticated vulnerability checks for InsightVM and Nexpose would be available July 20. No confirmed in-the-wild exploitation has been reported.
Why it matters
WordPress runs roughly 43 percent of all websites. A unauthenticated RCE in core with no preconditions has the broadest possible reach of any web vulnerability class. The patch is available and WordPress pushed automatic updates, but auto-update coverage is not universal. Hosting environments with auto-update disabled, manually managed installations, and sites running staging or development instances on older versions are all still exposed. The working public exploit is in circulation. Automated scanning is the expected next step.
Don't miss
A persistent object cache, Redis or Memcached sitting in front of the batch endpoint, can break the specific attack path for wp2shell as a side effect of how it intercepts requests. This is not a mitigation. It is an incidental condition that may or may not apply to any given deployment. Do not treat "we run Redis" as a reason to delay patching. The WAF interim control is blocking requests to /wp-json/batch/v1 and rest_route=/batch/v1, but this can break legitimate REST API integrations. Verify whether any plugins or custom code in your environment use the batch endpoint before enabling that block.
Potential actions
- Confirm every WordPress site in your environment is running 6.9.5 or 7.0.2. Check version numbers directly rather than assuming auto-update completed. Staging and development instances need the same update as production.
- If immediate patching is not possible, block requests to /wp-json/batch/v1 and rest_route=/batch/v1 at your WAF as an interim measure. Verify this does not break any REST API-dependent functionality before enforcing it in production.
- Check each site at wp2shell.com, Searchlight Cyber's free public checker, using only your domain. The checker confirms whether a site is still on a vulnerable version without requiring technical access.
The Sip
An anonymous HTTP request, no credentials, no plugins, no special setup, and code runs on the server. WordPress pushed auto-updates. That helps. It does not cover every deployment. Check your sites before automated scanners do it for you.