Skip to main content
Rogue WordPress Admins Created Through Poisoned JSON FeedIncident
4 min readFor Compliance Teams

Rogue WordPress Admins Created Through Poisoned JSON Feed

A supply-chain attack against BdThemes in March 2026 created unauthorized WordPress admin accounts across thousands of sites without altering a single plugin file. The attack exploited a cross-site scripting vulnerability in the Biggop Library and weaponized it through a compromised JSON feed that BdThemes plugins pulled from the vendor's infrastructure.

If you're running WordPress sites with third-party plugins, this incident shows how API-driven attacks can bypass your file integrity monitoring and plugin update controls.

What Happened

The attacker compromised BdThemes' infrastructure to inject malicious code into a JSON response that legitimate plugins requested during normal operation. When sites using BdThemes plugins loaded certain pages, the poisoned JSON created new WordPress admin accounts. The attack required no user interaction, no plugin updates, and left no trace in plugin files.

Wordfence identified the attack after detecting the pattern across multiple sites. The vulnerability originated in the Biggop Library's JSON response-parsing code, where insufficient output escaping allowed the injected JavaScript to execute in the context of the WordPress admin panel.

Timeline

March 2026: BdThemes introduces a coding flaw in the JSON response-parsing code within the Biggop Library. The flaw allows unsanitized data from API responses to render directly in the browser.

[Date Unknown]: The attacker gains access to BdThemes' infrastructure and begins serving malicious JSON responses to plugin requests.

[Date Unknown]: Wordfence detects unauthorized admin account creation across multiple WordPress sites using BdThemes plugins. Investigation traces the pattern back to the compromised JSON feed.

[Date Unknown]: BdThemes releases patched versions of affected plugins and rotates infrastructure credentials.

Which Controls Failed or Were Missing

Input validation and output encoding: The Biggop Library accepted JSON responses from the BdThemes API without validating the structure or sanitizing the content before rendering it in the browser. This violated basic XSS prevention principles.

API endpoint authentication: The JSON feed lacked sufficient authentication or integrity verification. The plugins trusted any response from what appeared to be the legitimate BdThemes domain, with no signature verification or certificate pinning to confirm the response hadn't been tampered with.

Supply-chain monitoring: Sites running BdThemes plugins had no visibility into what data those plugins were fetching or from where. Standard WordPress security plugins monitor file changes and plugin updates but don't inspect runtime API calls.

Least privilege for plugin capabilities: The vulnerable code ran with sufficient privileges to create WordPress admin accounts. The plugins should have requested only the minimum permissions needed for their documented functionality.

Infrastructure access controls: The initial compromise of BdThemes' infrastructure suggests inadequate segmentation between development, build, and distribution systems. Once inside, the attacker could modify production API responses.

What the Relevant Standards Require

OWASP ASVS v4.0.3 addresses this attack pattern directly:

  • Requirement 5.3.3: "Verify that context-aware output escaping or sanitization protects against reflected, stored, and DOM based XSS."
  • Requirement 14.1.3: "Verify that all components are up to date, preferably using a dependency checker during build or compile time."

PCI DSS v4.0.1 applies if you're processing payments on affected WordPress sites:

  • Requirement 6.2.4: "Bespoke and custom software are developed securely" (including proper input validation and output encoding).
  • Requirement 6.4.3: "All payment page scripts that are loaded and executed in the consumer's browser are managed" (which includes scripts loaded via API responses).

ISO/IEC 27001:2022 requires organizations to:

  • Control 8.30: Verify the integrity of externally sourced code and data.
  • Control 5.19: Establish and maintain security requirements in supplier relationships.

If you're running SOC 2 Type II controls, you'll need to demonstrate:

  • CC6.6: Logical and physical access controls restrict access to sensitive information.
  • CC7.2: The entity monitors system components and the operation of those components for anomalies that are indicative of malicious acts.

Lessons and Action Items for Your Team

Implement content security policy (CSP) headers on all WordPress admin pages. Set script-src 'self' to block inline JavaScript execution from untrusted sources. This won't prevent the API call, but it stops the payload from executing.

Audit your plugin inventory for API dependencies. For each plugin, document:

  • Which external APIs it contacts
  • What data it sends and receives
  • Whether those connections use certificate pinning or signature verification
  • What privileges the plugin requests

Deploy runtime application self-protection (RASP) or equivalent monitoring that inspects API responses before they reach the browser. Standard WordPress security plugins won't catch this attack pattern because the malicious code never touches the filesystem.

Require subresource integrity (SRI) hashes for any external resources your plugins load. While SRI typically applies to CDN-hosted JavaScript, you can extend the concept to API responses by implementing signature verification.

Segment your WordPress environment so plugin code runs with minimal privileges. Use WordPress multisite with network-level controls, or containerize individual sites to limit the blast radius when a plugin is compromised.

Review your vendor security questionnaires. Ask plugin developers:

  • How do you secure your build and distribution infrastructure?
  • Do you sign plugin updates and API responses?
  • What's your incident response timeline for supply-chain compromises?
  • Do you maintain separate credentials for development, staging, and production API endpoints?

Monitor for unexpected admin account creation. Configure alerts for any new WordPress user with administrator privileges. This attack created admin accounts as its primary indicator of compromise.

The BdThemes incident proves that supply-chain attacks don't need to modify plugin files to succeed. Your file integrity monitoring and update controls are necessary but insufficient. You need runtime visibility into what your plugins are doing, not just what code they ship.

Content Security Policy (CSP)

Topics:Incident

You Might Also Like