乐于分享
好东西不私藏

30个WordPress插件被收购:一场持续8个月的供应链潜伏战

30个WordPress插件被收购:一场持续8个月的供应链潜伏战

你永远不知道,那个帮你统计网站流量的插件,什么时候会变成一把钥匙。

上周五,安恒信息的安全研究员Austin Ginder写下了这句话。他刚刚追踪完一起罕见的供应链攻击——规模不大,但手法之老练,足以让每个依赖WordPress插件的站长脊背发凉。

故事要从今年4月7日说起。

一个插件,一封警告邮件

厦门某企业的网站管理员打开WordPress后台,收到一条官方安全通知:Countdown Timer Ultimate,这个他们用了几年的计时器插件,被发现含有可疑代码,可能导致未授权第三方访问。

插件已经被WordPress.org强制更新到2.6.9.1版本,理论上应该安全了。但Austin Ginder做了一次完整的安全审计后发现——真正的麻烦根本不在插件本身

恶意代码早就悄悄写进了wp-config.php。这个文件是WordPress的核心配置文件,位于网站根目录,通常不会被轻易怀疑。

代码是怎么进去的?

插件里有一个叫wpos-analytics的模块,听起来像正常的流量统计功能。它确实正常了很多年——直到2025年8月8日,插件发布了2.6.7版本。

这个版本的更新日志只写了一句话:”Check compatibility”(检查兼容性)。没有人注意。

但就是这个版本,悄悄添加了一行代码:连接到一个叫analytics.essentialplugin.com的域名,下载了一个名为wp-comments-posts.php的文件。这个文件名刻意模仿了WordPress核心文件wp-comments-post.php,只差一个连字符,极难发现。

下载完成后,它把一大段PHP代码注入进了wp-config.php。

注入的代码做了三件事:向C2服务器请求垃圾链接和重定向规则;只把这些内容展示给Googlebot,普通访客完全看不到;最重要的是——C2服务器的域名不是硬编码的,而是通过以太坊智能合约来解析的

换句话说,就算安全研究人员封禁了这个域名,攻击者只需要更新一下智能合约,指向一个新域名,整个僵尸网络就能原地复活。传统手段对这种攻击几乎无效。

溯源:谁在背后操作?

Austin Ginder追踪了这个插件组合的Flippa(域名交易平台)交易记录。这是一个由31个插件组成的打包组合,售价六位数,在WordPress.org上有8个月的下架记录——这段时间里,插件一直在官方目录里正常存在,但后门一直处于休眠状态。

8个月。

这正是这起攻击最令人不安的地方。攻击者不是在抢时间,他们有足够的耐心等待。他们知道,等到插件积累了足够的用户量、等到网站管理员完全信任这个插件、等到某个合适的时机——然后一击致命。

怎么发现中招的?

Austin Ginder用了一种很聪明的方式:文件大小比对法。

他调取了CaptainCore备份系统里,wp-config.php在过去8个月中8个时间节点的快照,对比文件大小。大部分时间点都是3345或3346字节——几乎没有变化。

4月7日:9540字节。

整整三倍的膨胀。注入发生在那之前的一周内,具体时间被锁定在4月6日04:22到11:06 UTC之间,只有6小时44分钟的窗口。

这不是第一次

Austin Ginder在文章开头提到了另一件事:就在大约一个月前,Widget Logic插件也发生过类似的供应链攻击。同样是信任的老插件被新所有者接管,同样是恶意代码悄悄植入。

一个月之内,两起。

这说明这不是孤立事件,而是有人在系统性地收购有影响力的WordPress插件,等待积累足够用户后激活后门。

我们能做什么?

几个务实的建议:

别只依赖官方更新。WordPress.org的强制更新清除了插件里的恶意代码,但没有清理wp-config.php。定期对比备份快照的文件大小,是一个低成本的风控手段。

关注插件所有权变更。如果一个你用了多年的插件突然换了开发者,或者更新日志变得异常简短——保持警惕。

备份不只是备份。CaptainCore这类工具的价值不只是恢复数据,还有 forensics(数字取证)。这次攻击的发现,正是通过分析备份文件差异实现的。

最后

WordPress运行着全球约43%的网站,插件生态是其核心优势,也是最大的攻击面。当一个插件在官方目录里正常存在了8个月、积累了数万次安装、通过了WordPress的安全审核——然后在某个凌晨悄悄改动你的网站配置文件。

你信任的工具,什么时候变成了别人的武器?

这个问题,可能没有让人安心的答案。

引用链接

[1]Someone Bought 30 WordPress Plugins and Planted a Backdoor in All of Them:https://anchor.host/someone-bought-30-wordpress-plugins-and-planted-a-backdoor-in-all-of-them/

[2]Servo is now available on crates.io:https://servo.org/blog/2026/04/13/servo-0.1.0-release/

[3]GitHub Stacked PRs:https://github.github.io/gh-stack/

[4]Stanford report highlights growing disconnect between AI insiders and everyone else:https://techcrunch.com/2026/04/13/stanford-report-highlights-growing-disconnect-between-ai-insiders-and-everyone-else/

[5]I Just Want Simple S3:https://blog.feld.me/posts/2026/04/i-just-want-simple-s3/

[6]Nothing Ever Happens: Polymarket bot:https://github.com/sterlingcrispin/nothing-ever-happens

[7]How to make Firefox builds 17% faster:https://blog.farre.se/posts/2026/04/10/caching-webidl-codegen/