上周,我曾报道过对名为 Widget Logic 的 WordPress 插件发起的一次供应链攻击。这个备受信赖的名字被新所有者收购后,竟沦为恶意软件。而类似事件再次发生,且规模空前。

来自 Improve & Grow 的 Ricky 向我们反映,他在客户的 WordPress 仪表盘中看到一个警报。该警告来自 WordPress.org 插件团队,提醒名为 Countdown Timer Ultimate 的插件包含一段代码,可能允许未经授权的第三方访问。
我对该站点进行了全面的安全审计。该插件本身已被 WordPress.org 强制更新至版本 2.6.9.1,理论上应能清除问题。但损害已然造成。
该插件的 wpos-analytics 模块向 analytics.essentialplugin.com 发送了请求,下载了一个名为 wp-comments-posts.php 的后门文件(伪装成核心文件 wp-comments-post.php),并将其用于向 wp-config.php 注入大量 PHP 代码。
注入的代码非常复杂。它从命令与控制服务器获取垃圾链接、重定向和虚假页面。它仅向 Googlebot 展示这些垃圾内容,使网站所有者无法察觉。最疯狂的是,它通过以太坊智能合约解析其 C2 域名,查询公共区块链 RPC 端点。传统的域名查封手段将失效,因为攻击者可以随时更新智能合约,指向新的域名。
强制更新未能清理 wp-config.php
WordPress.org 的 v2.6.9.1 更新虽然禁用了插件中的“电话回家”机制,但并未处理 wp-config.php。SEO 垃圾内容注入仍在持续向 Googlebot 提供隐藏内容。
CaptainCore 保留每日 restic 备份。我从 8 个不同日期的备份中提取了 wp-config.php 文件并比较了文件大小,采用二分查找法。

注入发生在 2026 年 4 月 6 日,UTC 时间 04:22 至 11:06 之间,共 6 小时 44 分钟。
我通过 939 个 quicksave 快照追溯了该插件的历史。该插件自 2019 年 1 月起就存在于该站点。wpos-analytics 模块一直存在,多年来作为合法的 analytics opt-in 系统正常运行。
直到 2025 年 8 月 8 日发布版本 2.6.7,情况发生了变化。更新日志声称:“检查与 WordPress 6.8.2 版本的兼容性。”实际上,它添加了 191 行代码,包括一个 PHP 反序列化后门。class-anylc-admin.php 文件从 473 行增长到 664 行。
新增代码引入了三个关键元素:
这完全符合教科书式的任意函数调用模式。远程服务器控制函数名、参数等一切内容。它在 2026 年 4 月 5-6 日被激活前,已休眠 8 个月。
事情变得更有趣了。原始插件由 Minesh Shah、Anoop Ranawat 和 Pratik Jain 开发。这是一个印度团队,自约 2015 年起以 "WP Online Support" 名义运营。他们后来 rebranded 为 "Essential Plugin",并将插件组合扩展到 30+ 免费插件及其付费版本。
到 2024 年底,收入下降了 35-45%。Minesh 在 Flippa 上列出了整个业务。一位仅被称为 "Kris" 的买家,背景涉及 SEO、加密货币和在线赌博营销,以六位数价格购买了全部资产。Flippa 甚至在 2025 年 7 月发表了关于此次交易的案例研究。
| 年份 | 事件 |
|---|---|
| 2015年2月 | 注册 wponlinesupport.com 域名。团队开始开发 WordPress 插件。 |
| 2016年10月 | Countdown Timer Ultimate 由 anoopranawat 发布到 WordPress.org。 |
| 2021年8月 | 注册 essentialplugin.com 域名。公司从 WP Online Support 更名为 Essential Plugin。 |
| 2024年底 | 收入下降 35-45%。Minesh Shah 在 Flippa 上列出整个业务。 |
| 2025年初 | 买家 'Kris' 通过 Flippa 以六位数价格收购 Essential Plugin。 |
| 2025年5月12日 | 创建新的 essentialplugin WordPress.org 账户。 |
| 2025年5月14-16日 | 原 wponlinesupport 账户的最后提交。作者信息变更。 |
| 2025年8月8日 | essentialplugin 账户首次提交。版本 2.6.7 植入 unserialize() RCE 后门。更新日志造假:'检查与 WordPress 6.8.2 版本的兼容性。' |
| 2025年8月30日 | essentialplugin.com WHOIS 更新为 'Kim Schmidt',地址为苏黎世 ProtonMail。 |
| 2026年4月5-6日 | 后门被武器化。analytics.essentialplugin.com 开始向运行这些插件的所有站点分发恶意载荷。 |
| 2026年4月7日 | WordPress.org 插件团队在同一天永久关闭所有 31 个 essentialplugin 插件。 |
| 2026年4月8日 | WordPress.org 强制所有站点自动更新至 v2.6.9.1。添加 return; 语句并注释掉 @$clean() 后门行。 |
买家的第一个 SVN 提交就是后门代码。
2026 年 4 月 7 日,WordPress.org 插件团队永久关闭了 Essential Plugin 作者下的所有插件。至少 30 个插件在同一天被关闭。以下是我确认的插件列表:
全部被永久关闭。在 WordPress.org 上搜索作者已无结果。analytics.essentialplugin.com 端点现在返回 {"message":"closed"}。
2017 年,一位使用别名 "Daley Tias" 的买家以 15,000 美元购买了 Display Widgets 插件(20 万次安装量),并注入了发薪日贷款垃圾邮件。该买家此后至少以同样方式破坏了 9 个插件。
Essential Plugin 案件是同一剧本的大规模应用。30+ 个插件,数十万活跃安装量,一个拥有八年历史的合法业务通过公开市场被收购,并在数月内被武器化。
WordPress.org 的强制更新通过添加 return; 语句禁用了“电话回家”功能。但这只是权宜之计。wpos-analytics 模块及其所有代码仍然存在。我构建了移除整个后门模块的修补版本。
我扫描了整个舰队,发现 26 个 Essential Plugin 插件中有 12 个安装在 22 个客户站点上。我修补了其中的 10 个(一个没有后门模块,一个是原作者的不同 "pro" 分支)。以下是托管在 B2 上的修补版本:
wp plugin install https://plugins.captaincore.io/countdown-timer-ultimate-2.6.9.1-patched.zip --force
wp plugin install https://plugins.captaincore.io/popup-anything-on-click-2.9.1.1-patched.zip --force
wp plugin install https://plugins.captaincore.io/wp-testimonial-with-widget-3.5.1-patched.zip --force
wp plugin install https://plugins.captaincore.io/wp-team-showcase-and-slider-2.8.6.1-patched.zip --force
wp plugin install https://plugins.captaincore.io/sp-faq-3.9.5.1-patched.zip --force
wp plugin install https://plugins.captaincore.io/timeline-and-history-slider-2.4.5.1-patched.zip --force
wp plugin install https://plugins.captaincore.io/album-and-image-gallery-plus-lightbox-2.1.8.1-patched.zip --force
wp plugin install https://plugins.captaincore.io/sp-news-and-widget-5.0.6-patched.zip --force
wp plugin install https://plugins.captaincore.io/wp-blog-and-widgets-2.6.6.1-patched.zip --force
wp plugin install https://plugins.captaincore.io/featured-post-creative-1.5.7-patched.zip --force
wp plugin install https://plugins.captaincore.io/post-grid-and-filter-ultimate-1.7.4-patched.zip --force
每个修补版本都会删除插件中的整个 wpos-analytics 目录,从主插件文件中删除加载器函数,并将版本号更改为 -patched。插件本身继续正常运行。
使用 Claude Code 处理起来很简单。将该文章作为上下文,告诉它您需要修补哪个插件,它可以像我所做的那样剥离 wpos-analytics 模块。所有 Essential Plugin 插件的模式完全相同:
检查您的 wp-config.php
恶意软件会附加在与 require_once ABSPATH . wp-settings.php; 相同的行上,因此快速浏览很容易遗漏。如果您的文件大小明显大于预期(注入的有效载荷增加约 6KB),则该站点已被主动入侵,需要超出简单修补插件的全面清理。
两周内发生了两次供应链攻击。两者遵循相同模式:购买具有成熟安装基础的受信任插件,继承 WordPress.org 提交权限,然后注入恶意代码。Essential Plugin 在 Flippa 上的挂牌信息是公开的。买家在 SEO 和赌博营销方面的背景也是公开的。然而,这次收购未经 WordPress.org 的任何审查就通过了。
WordPress.org 没有任何机制可以标记或审查插件所有权转移。没有“控制权变更”通知用户。没有为新提交者触发额外的代码审查。插件团队在攻击被发现后反应迅速。但从后门被植入到被发现,中间隔了 8 个月。
如果您管理 WordPress 站点,请搜索您的舰队中是否有上述列出的 26 个插件 slug 中的任何一个。如果找到,请修补或删除它。并检查 wp-config.php。