Security advisory
Web SecurityCriticalMitigated

wp2shell: WordPress Core Pre-Auth RCE Fixed in 6.9.5 and 7.0.2

A REST API batch-route confusion and SQL injection chain in WordPress core lets an unauthenticated attacker reach code execution: no plugins, no preconditions.

Emanuel De AlmeidaAug 22, 2026, 9:52 PM6 min read
Severity
Critical
Status
Mitigated
Entity
WordPress
Confirmed by
WordPress release post and Assetnote (Searchlight Cyber)

WordPress has patched wp2shell, a pre-authentication remote code execution flaw that an anonymous HTTP request can trigger against a default install with zero plugins. The project shipped 6.9.5 and 7.0.2 on July 17, 2026, and enabled forced updates through its auto-update system to push the fix out.

Because the flaw is in core, a bare WordPress install is exploitable. The researcher who found it says the attack has no preconditions and works for an anonymous user, so patch speed is your only real defense before technical details surface.

Key takeaways

  • A pre-auth RCE in WordPress core, named wp2shell, was fixed in 6.9.5 and 7.0.2 on July 17, 2026.
  • Affected ranges are 6.9.0 through 6.9.4 and 7.0.0 through 7.0.1.
  • WordPress describes it as a REST API batch-route confusion and SQL injection issue leading to RCE.
  • No CVE ID or CVSS score had been assigned as of July 18; track it by version number.
  • No exploitation had been reported as of July 18, but the code diff is public in the release archive.

Affected

Vendors
WordPress
Products
WordPress core
Geography
Global

What is the wp2shell WordPress core RCE?

wp2shell is a pre-authentication remote code execution flaw in WordPress core. An anonymous HTTP request can trigger it against a default install with no plugins. WordPress released 6.9.5 and 7.0.2 on July 17, 2026 to close it, and turned on forced updates through its auto-update system to push the patch to affected sites.

Adam Kues at Assetnote, the attack surface management arm of Searchlight Cyber, found the bug and reported it through WordPress's HackerOne program. The firm's writeup, published under the name wp2shell, states the attack has "no preconditions and can be exploited by an anonymous user." Assetnote is holding back the technical details for now. Instead it posted a checker at wp2shell.com so owners can test their own instance.

WordPress describes Kues's finding as "a REST API batch-route confusion and SQL injection issue leading to Remote Code Execution." The release closes one critical and one high severity flaw, and the project has not said which is which.

  • Fixed in WordPress 6.9.5 and 7.0.2 on July 17, 2026
  • Reported via WordPress's HackerOne program by Assetnote

Which WordPress versions are affected?

Two release ranges are in scope. The vulnerable code only exists from 6.9 onward, which shipped on December 2, 2025, so every affected site is running a release less than eight months old.

  • 6.9.0 through 6.9.4, fixed in 6.9.5
  • 7.0.0 through 7.0.1, fixed in 7.0.2
  • 7.1 beta2 carries the same fix

Sites still on 6.8 have an update waiting too, but 6.8.6 addresses a separate SQL injection bug reported by a different team in the same round. Searchlight's post cites the common estimate that over 500 million websites run WordPress. That is the total install base, not the vulnerable population. Neither advisory says how many sites the affected ranges cover.

Auto-update status is unclear

WordPress has not said whether the forced push reaches sites that turned auto-updates off. Check what version you're actually running rather than assume the patch landed.

  • Vulnerable code was introduced in 6.9 (December 2, 2025)

What is known about the batch endpoint?

The version page lists three files that 7.0.2 touched, covering both fixes in the round: /wp-includes/rest-api/class-wp-rest-server.php, /wp-includes/class-wp-query.php, and /wp-includes/rest-api.php.

The batch endpoint itself isn't new. WordPress has shipped it since 5.6 in November 2020 and documented the request format publicly ever since. Nothing published so far explains what changed in 6.9 to open the flaw. The two accessible routes are /wp-json/batch/v1 and rest_route=/batch/v1, and both matter for mitigation.

  • 7.0.2 modified three core files across both fixes

How do you mitigate it before updating?

Updating to 6.9.5 or 7.0.2 is the fix. If you can't update immediately, every mitigation Searchlight offers comes down to keeping anonymous callers off the batch endpoint. All three are stopgaps, and all can break legitimate integrations.

  • At a WAF, block both /wp-json/batch/v1 and rest_route=/batch/v1. The firm is explicit that both must go; a rule covering only the /wp-json path leaves the query-string route open.
  • Disable the WP REST API, which kills unauthenticated REST access wholesale.
  • Deploy a short drop-in plugin that hooks rest_pre_dispatch and rejects anonymous /batch/v1 requests.

Verify the version

There's no CVE to tag and no public signature to match, so track this one by version number and confirm the running build after any forced update.

Why the missing CVE makes this harder to track

Neither advisory carries a CVE ID or a CVSS score, and no CVE record had appeared by July 18. That has practical consequences. CVE-keyed scanners and inventories won't flag this one, and CISA needs a CVE before it can add anything to its Known Exploited Vulnerabilities catalog.

No exploitation attempt had been reported as of July 18. With no CVE and no public signature, detection depends on watching traffic against the batch/v1 routes and on WordPress's own version statistics.

  • No CVE record existed as of July 18, 2026

The open-source patch dilemma

Mass exploitation of WordPress is now an industry. Before its server leaked in June, the WP-SHELLSTORM crew got into more than 17,000 sites by its own count via a single caching-plugin flaw. That bug was already public, already patched, and only worked on a non-default setting.

When Drupal patched an anonymous SQL injection in its own core in May, Searchlight turned that public fix into a same-day teardown with two working proofs of concept. WordPress core is open source, and 7.0.1 and 7.0.2 both sit in the public release archive, so the diff is available to anyone who wants it. That's the bind for open-source projects: you can't ship the fix without shipping a map to the bug. The only lever left is how fast the patch reaches sites before someone reads it.

What to watch next

Two numbers will tell the story. Traffic against the batch/v1 routes shows when attackers arrive, and WordPress's version statistics show whether the forced update got there first. Watch for a CVE assignment, any public proof of concept, and Assetnote releasing the withheld technical writeup.

Timeline

Nov 1, 2020
Batch endpoint shippedWordPress introduced the REST API batch endpoint in version 5.6 and documented its request format publicly.
Dec 2, 2025
6.9 releasedWordPress 6.9 shipped, introducing the code path that later proved vulnerable.
Jul 17, 2026
Patch releasedWordPress released 6.9.5 and 7.0.2, closing the pre-auth RCE, and enabled forced updates.
Jul 18, 2026
No exploitation reportedNo exploitation attempt and no CVE record had appeared.

Impact & actions

A default WordPress install on an affected version can be compromised by an unauthenticated attacker sending a single crafted request to the REST batch endpoint.

Security: Pre-auth RCE against a default install means no plugin, credential or configuration barrier stands between an anonymous request and execution.

Privacy: Site and user data stored in the WordPress database could be exposed following compromise.

Recommended actions · Immediate urgency

  1. 1Confirm the site runs WordPress 6.9.5 or 7.0.2 (or 7.1 beta2)
  2. 2If you cannot update, block both /wp-json/batch/v1 and rest_route=/batch/v1 at the WAF
  3. 3Monitor traffic against the batch/v1 routes for anomalous anonymous requests

Technical details

Attack vector
Network: unauthenticated HTTP request to the REST API batch endpoint
Affected versions
6.9.0, 6.9.1, 6.9.2, 6.9.3, 6.9.4, 7.0.0, 7.0.1
Patched versions
6.9.5, 7.0.2, 7.1 beta2

Mitigations

  • Update to WordPress 6.9.5 or 7.0.2
  • Block both /wp-json/batch/v1 and rest_route=/batch/v1 at a WAF
  • Disable the WP REST API to remove unauthenticated REST access
  • Deploy a drop-in plugin rejecting anonymous /batch/v1 requests at rest_pre_dispatch

Response

Vendor

WordPress's release post describes the fix as addressing a REST API batch-route confusion and SQL injection issue leading to Remote Code Execution, covering one critical and one high severity flaw.

Customer guidance

WordPress shipped 6.9.5 and 7.0.2 and enabled forced updates. Owners should confirm their running version rather than assume the auto-update landed, especially where auto-updates were disabled.

FAQ

Which WordPress versions are affected by wp2shell?

Versions 6.9.0 through 6.9.4 and 7.0.0 through 7.0.1. The fixes landed in 6.9.5 and 7.0.2, and 7.1 beta2 carries the same fix.

Do I need plugins installed to be vulnerable?

No. The flaw is in WordPress core, so a default install with zero plugins is exploitable by an anonymous HTTP request.

Is there a CVE for this vulnerability?

As of July 18, 2026, no CVE ID or CVSS score had been assigned. Track the issue by version number instead of relying on CVE-keyed scanners.

How do I mitigate it if I cannot update right now?

Block both /wp-json/batch/v1 and rest_route=/batch/v1 at a WAF, disable the WP REST API, or deploy a drop-in plugin that rejects anonymous /batch/v1 requests. All are temporary stopgaps.

Has wp2shell been exploited in the wild?

No exploitation attempt had been reported as of July 18, 2026, but the fix is public in the WordPress release archive, so the diff is available to anyone.

The bottom line

WordPress patched a pre-auth core RCE named wp2shell in 6.9.5 and 7.0.2 on July 17, 2026, affecting 6.9.0-6.9.4 and 7.0.0-7.0.1.

What to do

Verify the running WordPress version and apply the update or a batch-endpoint block immediately.

Reader reviews

Rate this articleBe the first to rate
No written reviews yetRate the article above, or be the first to share your experience.

Related articles