Sécurité

WordPress wp2shell: the critical RCE flaw that forced an emergency update

Roger Gnanih 19 July 2026 4 min read 355 views
WordPress wp2shell: the critical RCE flaw that forced an emergency update

On July 17, 2026, WordPress did something it almost never does: ignore administrators' choices and force an update on millions of sites, even those where automatic updates were disabled.

The name of the flaw: wp2shell. The verdict of the researchers who found it: remote code execution, without authentication, on a default installation, without any plugin.

In other words, the worst possible scenario for a CMS that runs more than 40 % of the web.

Why this flaw stands out

Every week brings its share of WordPress vulnerabilities. In the vast majority of cases, they affect a third-party plugin or theme, with a limited install base and a vector that already assumes a minimum level of access.

wp2shell checks none of these reassuring boxes:

  • It lives in the core of WordPress, not in a plugin.
  • It is exploitable without an account, without privileges, without interaction.
  • It affects a default installation, as is, straight out of the box.

It is this combination that pushed Searchlight Cyber, the team that discovered the flaw, to classify it as critical, and that pushed WordPress to respond with a forced deployment rather than a simple security bulletin.

How the attack works

Everything starts from a REST API endpoint meant to save time: /wp-json/batch/v1, which allows grouping several API calls into a single request.

The problem lies in the way this endpoint resolves internal routes, a confusion that lets unsanitized data through to the database. The complete chain unfolds in two stages:

  1. An SQL injection via batch processing, which allows manipulating queries sent to the database.
  2. Arbitrary code execution (RCE), made possible by what was injected in the previous step.
CVE-2026-60137: the SQL injection component, which also affects the 6.8 branch
CVE-2026-63030: the complete chain leading to RCE, reported by researcher Kues

Affected versions

6.8.x: vulnerable up to 6.8.5 (SQLi only) → fixed in 6.8.6
6.9.x: vulnerable from 6.9.0 to 6.9.4 → fixed in 6.9.5
7.0.x: vulnerable from 7.0.0 to 7.0.1 → fixed in 7.0.2
7.1 (beta): vulnerable in beta1 → fixed in beta2

The real warning sign: the force-push

WordPress has a background automatic update system, but it normally respects an administrator's wish to disable it. It is one of the rare configuration decisions that WordPress core never questions.

On July 17, that rule was broken. The fix was pushed to all affected sites, whether or not they had auto-update enabled.

🚨 It is this detail, more than the vulnerability itself, that deserves attention. WordPress breaks this trust contract only on very rare occasions. The implicit message: the risk of mass exploitation was deemed too high to leave it in the administrators' hands.

What to do, concretely

  1. Verify the version actually installed. Do not assume the auto-update worked. On shared hosting or custom configurations, automatic updates can fail silently. Go directly to the admin dashboard and confirm the displayed version: 6.9.5, 7.0.2, or higher.
  2. If an immediate update is not possible, put at least one of these mitigations in place while you patch.
  3. Monitor the logs over the following days for any suspicious requests to the batch endpoint, even after the fix, a sign that a third party was already testing the flaw before the patch.
  • Block /wp-json/batch/v1 and rest_route=/batch/v1 at the WAF or reverse proxy level
  • Install a plugin that restricts unauthenticated access to the REST API
  • Add a must-use plugin that requires authentication on the batch route

Key Takeaways

No active exploitation had been reported at the time of disclosure, according to Searchlight Cyber. But the history of WordPress core vulnerabilities is unambiguous: the window between public disclosure and the first automated exploitation attempts is measured in hours, not days.

If you manage even a single WordPress site, this fix is not one to put off until tomorrow.

Written by Roger Gnanih

Fullstack engineer & cybersecurity analyst. I share what I learn while building products.

Learn more

Enjoyed this article?

Get the next ones by email: dev, AI & cybersecurity.

Articles you may like

All articles

Comments (0)

Leave a Comment

Will not be published
0 / 2000 characters

Be the first to comment on this article!

Chat on WhatsApp

Schedule a Strategy Call

Let's connect for 15-30 minutes to discuss your roadmap, software architecture, or system security.