WordPress Supply Chain Attack Infects 30+ Plugins Planted Malicous Backdoor
A malicious buyer used the Flippa marketplace to acquire a plugin developer, injecting a backdoor into over 30 WordPress plugins with hundreds of thousands of installations to deploy hidden SEO spam.

Indicators of Compromise (1)
| Type ↑ | Value | Description | Conf | |
|---|---|---|---|---|
| IP | 2.6.9.1 | Extracted from source material | high |
A significant WordPress supply chain attack has compromised over 30 plugins with hundreds of thousands of active installations, following the acquisition of a legitimate developer business through the marketplace Flippa. The new owner, identified only as “Kris,” injected a sophisticated backdoor that lay dormant for eight months before activating a campaign to inject SEO spam hidden from site owners but visible to search engines. This incident, which led WordPress.org to permanently close all affected plugins in a single day, underscores a critical vulnerability in the open-source plugin ecosystem where ownership changes can introduce malicious code without triggering security reviews.
Anatomy of the Essential Plugin Backdoor and Attack Chain
The attack began with the August 2025 sale of Essential Plugin, a rebranded entity originally known as WP Online Support. The buyer’s first commit to the plugin repository, under the guise of a compatibility update for WordPress 6.8.2, introduced a remote code execution (RCE) backdoor. According to forensic analysis, version 2.6.7 of plugins like Countdown Timer Ultimate added 191 lines of malicious code to a file named class-anylc-admin.php.
The backdoor operated through a module named wpos-analytics, which had previously functioned as a legitimate analytics opt-in system. The new code established three key components:
- A
fetch_ver_info()method that usedfile_get_contents()to retrieve data from the attacker-controlled domainanalytics.essentialplugin.comand passed the response to@unserialize(). - A
version_info_clean()method designed to execute a function call structured as@$clean($this->version_cache, $this->changelog), where the function name and arguments were entirely controlled by the unserialized remote data. - An unauthenticated REST API endpoint registered with
permission_callback: __return_true, providing a direct vector for remote trigger.
This setup created a textbook arbitrary function call vulnerability. The backdoor remained inactive until April 5-6, 2026, when the command-and-control (C2) server began distributing a malicious payload. The payload was a file named wp-comments-posts.php—a deliberate misspelling of the core WordPress file wp-comments-post.php—which was downloaded and executed. Its primary action was to inject a large, obfuscated block of PHP code directly into the site’s wp-config.php file. This persistence mechanism ensured the compromise survived plugin updates.
Impact and Novel C2 Technique Using Ethereum Smart Contracts
The injected code in wp-config.php facilitated a large-scale SEO spam operation. It fetched links, redirects, and fake page content from the C2 server and displayed this content exclusively to user agents identified as Googlebot, making the compromise invisible to regular site visitors and administrators. This technique, known as cloaking, aims to manipulate search engine rankings without alerting the website owner.
The campaign’s most technically notable aspect was its resilience to takedowns. Researchers found that the malware resolved its C2 domain by querying an Ethereum smart contract via public blockchain RPC endpoints. This method meant that the attacker could update the smart contract to point to a new domain at any time, rendering traditional domain seizure or takedown requests ineffective. The infrastructure’s agility presented a significant challenge for defenders.
The scale of the compromise is vast. At least 30 free plugins from the Essential Plugin author were permanently closed by the WordPress.org Plugins Team on April 7, 2026. These plugins, covering functionalities from sliders and countdown timers to galleries and FAQs, collectively represented hundreds of thousands of active installations. Any website that had not updated these plugins before April 2026 was potentially vulnerable to the initial infection. Crucially, while WordPress.org forced an auto-update to version 2.6.9.1 on April 8 to neutralize the plugin’s phone-home function, this update did not remove the malicious injection from wp-config.php. Compromised sites remained actively infected despite the plugin update, requiring manual remediation.
Detection Indicators and Manual Remediation Steps
Defenders should immediately inventory their WordPress installations for any plugins from the affected Essential Plugin portfolio. The closed plugins include, but are not limited to:
accordion-and-accordion-slideralbum-and-image-gallery-plus-lightboxcountdown-timer-ultimatepopup-anything-on-clicksp-faqsp-news-and-widgettimeline-and-history-sliderwp-blog-and-widgetswp-testimonial-with-widget
The forced update from WordPress.org added return; statements to short-circuit the malicious functions, but the wpos-analytics module remains present. A thorough cleanup requires completely removing this module. Administrators can create patched versions by:
- Deleting the
/wpos-analytics/directory from the plugin’s folder. - Removing the loader function block in the main plugin PHP file (often identified by a comment like “Plugin Wpos Analytics Data Starts” or a function named
wpos_analytics_anl). - Incrementing the version number in the plugin header.
The most critical detection step is examining the wp-config.php file. The malware appends approximately 6KB of obfuscated code onto the same line as require_once ABSPATH . 'wp-settings.php';. A simple file size check can be revealing; a clean wp-config.php is typically around 3-4KB, while an infected one balloons to over 9KB. If this injection is present, the site requires a full security audit, as the backdoor could have been used to deploy additional payloads. The historical C2 domain, analytics.essentialplugin.com, now returns {"message":"closed"}, but any outbound connections to this host in logs are a definitive indicator of compromise.
Key Takeaways for WordPress Ecosystem Defense
- Audit for Affected Plugins and Check
wp-config.phpImmediately. System administrators must scan all managed WordPress sites for the listed Essential Plugin slugs. Merely updating the plugin is insufficient; thewp-config.phpfile must be manually inspected for the appended malicious code, and any infection requires a comprehensive cleanup. - Treat Plugin Ownership Changes as a Security Risk. This attack mirrors a [2017 incident]([wordpress plugin supply chain attack]) where a purchased plugin was weaponized. The WordPress.org ecosystem currently lacks a mechanism to flag or review changes in plugin ownership. Organizations should monitor commit histories and author changes for critical plugins, as a sudden change in maintainer can precede a supply chain attack.
- Implement Robust Backup and File Integrity Monitoring. The attack was identified through detailed backup forensics, comparing
wp-config.phpfile sizes across daily snapshots. Maintaining frequent, immutable backups and employing file integrity monitoring for core files likewp-config.phpare essential for detecting unauthorized modifications and enabling precise restoration. - Assume Compromise if Infection is Found and Investigate Fully. The presence of the
wp-config.phpinjection indicates the backdoor was active. Defenders should assume the attacker had unrestricted access and search for additional backdoors, unauthorized admin users, or other malicious scripts that may have been installed during the compromise window.
Stay Updated
Get the latest cybersecurity news delivered to your inbox.

