# WordPress's REST API Just Became a Master Key — And Attackers Found It in 13 Minutes


The first probe hit at 23:29 UTC on July 17. Thirteen minutes later, attackers were already attempting SQL injection. That's the timeline for wp2shell — a pair of critical vulnerabilities in WordPress Core (CVE-2026-63030 and CVE-2026-60137) that have turned the platform's own REST API into an unauthenticated remote code execution engine.


As of today, nearly one in five WordPress sites in a live sample remains unpatched. WordPress powers somewhere north of 43% of the internet. Do that math.


## The Attack Chain Is Elegant and Ugly


The wp2shell exploit abuses the WordPress REST API's batch-processing feature — a convenience mechanism that lets multiple API requests be bundled into a single call. Attackers found that this batching layer could be weaponized to achieve remote code execution without credentials. No login required. No brute force. Just a well-formed request aimed at a feature that was never designed to be a security boundary.


What Wiz observed in the wild is a textbook persistence playbook, executed at scale:


  • Mass scanning for vulnerable installs — automated probes carpet-bombing exposed endpoints
  • Plugin upload abuse — WordPress's legitimate plugin installation mechanism repurposed to drop malicious add-ons
  • Webshell installation ranging from single-line PHP backdoors to obfuscated, feature-rich shells disguised as plugins (including CMSmap variants)
  • Credential harvesting via local file inclusion targeting wp-config.php through admin-ajax.php, pulling database credentials and authentication keys
  • Admin account creation — rogue administrator users added to extend access even if the webshell is found and removed

  • SANS researcher Johannes Ullrich dissected a particularly crafty variation: webshells planted in /wp-content/cache/ under randomized filenames, with that same random string serving as the password via a URL parameter. Direct access without the magic string returns a convincing fake 404. Security teams skimming access logs won't see anything scream "backdoor" — they'll see what looks like a broken cache file request.


    The shell itself was written defensively: it probed for whichever PHP execution function the server permitted — system(), passthru(), exec(), shell_exec(), popen(), or the backtick operator — cycling through options until something worked. Whoever wrote this understood that hardened PHP configurations disable some of these, and they planned for it.


    ## The Patch Window That Wasn't


    WordPress pushed fixes in versions 7.0.2, 6.9.5, and 6.8.6, with automatic security updates enabled for supported installs. That should have been a clean win. WordPress's auto-update mechanism exists precisely for moments like this.


    Except Macnica researcher Yutaka Sejiyama is tracking the patch rate live, and the current figure across 124,580 evaluated sites sits at 81.6%. Nearly 19% haven't received the fix — whether due to disabled auto-updates, managed hosting that queues updates on a delay, or sites that simply haven't been touched in months.


    On a platform that runs tens of millions of active sites, 18% isn't a rounding error. It's an ocean of persistent attack surface, and threat actors are actively scanning it.


    Defiant's timeline makes the urgency concrete: the first exploitation-relevant probe arrived within hours of public disclosure. PoC code began circulating over the weekend after SearchLight Cyber's disclosure. Security disclosures and weaponizable proof-of-concept code now move in near-lockstep — the era of a 30-day exploitation grace period is long gone.


    ## What Defenders Need to Check Right Now


    If you're running WordPress — or managing WordPress infrastructure for clients — the update to 7.0.2, 6.9.5, or 6.8.6 is not optional. Do it before reading further.


    Beyond patching, the post-exploitation indicators to hunt:


    Filesystem:

  • Unexpected PHP files in /wp-content/cache/ — especially with randomized names
  • New files in /wp-content/plugins/ not matching legitimate installed plugins
  • Any .php file with obfuscated content or eval/base64 chains

  • Users:

  • WordPress admin user list — look for accounts created in the July 17–21 window
  • REST API endpoints that expose admin email addresses (query /?rest_route=/wp/v2/users/)

  • Logs:

  • Requests to admin-ajax.php with unusual parameters
  • Batch API requests to /?rest_route=/batch/v1
  • 404 responses followed immediately by the same path returning 200 — a classic webshell probe pattern

  • Wiz reports no observed lateral movement or data exfiltration yet, but "yet" is doing real work in that sentence. Webshells are staging infrastructure. They sit dormant until someone decides to use them.


    ---


    ## HackWire Analysis


    The detail that's getting underplayed in other coverage: SearchLight Cyber researcher Adam Kues disclosed that developing the wp2shell exploit chain involved AI tooling. That's not a throwaway line.


    We're watching the commoditization of vulnerability research play out in real time. The traditional gap between "security researcher finds complex bug" and "criminal group weaponizes it" used to be measured in weeks or months, partly because exploit development required deep technical skill. AI-assisted analysis is compressing that timeline — and the wp2shell case suggests we're reaching a point where the PoC-to-exploitation interval is measured in hours, not days.


    This also fits a pattern that should concern anyone running PHP-based CMS infrastructure. WordPress's REST API has been an exploitation vector before — the 2017 REST API content injection vulnerability (CVE-2017-1001000) followed a similar arc: REST endpoint, unauthenticated access, mass exploitation. The platform keeps expanding its REST API surface area because developers want the flexibility, and attackers keep finding ways to abuse the trust model that flexibility requires.


    The 81.6% patch rate also deserves scrutiny as a systemic number, not a success metric. In absolute terms, even being conservative about total WordPress deployments, we're talking about hundreds of thousands of installations sitting exposed right now with a fully weaponized exploit chain in circulation. The auto-update mechanism is doing its job — the problem is the installs where it's been disabled, often by agencies or developers who want control over update timing. That tradeoff has a cost, and wp2shell is what paying it looks like.


    For defenders managing WordPress estates at scale: this is the case for centralized update monitoring. Not a nice-to-have. If you can't confirm patch status across your WordPress inventory within 24 hours of a critical disclosure, your vulnerability management program has a gap that attackers will find before you do.


    — HackWire Editorial


    ---


    ## Related Coverage


  • Read more in our [Vulnerabilities](https://www.hackwire.news/category/vulnerabilities) coverage
  • Cross-reference with [Breaches](https://www.hackwire.news/category/breaches) and [Malware](https://www.hackwire.news/category/malware)
  • Stay current via the [HackWire homepage](https://www.hackwire.news/)