开发者生态
morning
攻击者在Flippa上购买了30个WordPress插件,并在所有插件中植入了后门
2026-05-12
1 阅读
作者:Steef-Jan Wiggers
一名攻击者在数字市场Flippa上以六位数的价格购入了Essential Plugin的全部产品组合,其中包括30多个WordPress插件,总安装量达40万次。该买家的 首次代码提交 "便是一个PHP反序列化后门。该后门潜伏了八个月,直至2026年4月才被激活,它向所有运行着受感染插件的网站注入了伪装的SEO垃圾内容。WordPress.org在一天之内永久下架了全部31个插件。Anchor Hosting创始人、此次攻击的发现者Austin Ginder 写道 ": 两周内发生了两起供应链攻击,而且攻击模式如出一辙:购买一个拥有稳定用户群的受信任插件,借此获得WordPress.org的提交权限,然后植入恶意代码。 这种攻击模式并非WordPress所独有。它利用了所有允许维护权转移的软件包生态系统共有的结构性弱点:npm、PyPI、浏览器扩展商店以及VS Code市场都面临着同样的风险。接手者将继承前任维护者的提交权限、声誉,以及所有启用了自动更新的用户默认给予的信任。系统不会触发任何额外的代码审查,也不会发送控制权变更通知。 之前已经有相关案例的详细记录。2018年,npm包event-stream被移交给了新的维护者,而后者嵌入了窃取比特币钱包的代码。在人们注意到之前,它每周的下载量达到了数百万次。2024年,XZ Utils后门几乎让攻击者获得了全球大量Linux服务器的根权限。在此之前,攻击者花费了两年时间在开源社区中建立信任。这种模式始终如一:建立信任,获取权限,等待时机,然后发动攻击。 在LinkedIn上 关于此次攻击的一场讨论 "中,软件工程师Levent Sali指出,放弃使用WordPress并不能消除风险: 如果你从WordPress迁移到React/Next.js技术栈,就等于将信任寄托在数百个npm包上,其中许多包仅由一名无偿的志愿者维护。这只不过是换了个供应商罢了,并不能消除风险。 在同一个话题讨论中,软件开发人员Kevin Riedl提出了类似的观点,并补充说,npm包潜在的影响范围可能更大,因为“它们也会在你的本地设备上运行”,这意味着遭到入侵的npm依赖项不仅会影响Web服务器,还会直接影响开发者的工作站。 这次攻击的技术实施过程既耐心又精巧。该后门于2025年8月8日植入2.6.7版本中,伪装在一条名为“检查与WordPress 6.8.2版本的兼容性”的更新日志条目之下。新增的191行代码中包含:一个fetch_ver_info()方法,它会在攻击者的服务器上调用file_get_contents()并将响应传递给@unserialize();一个未经过身份验证的REST API端点,其permission_callback设置为__return_true;一个version_info_clean()方法,其中函数名、参数和执行上下文均来自远程有效载荷。这正是教科书式的任意函数调用。当该有效载荷于4月5日至6日被激活时,它下载了一个名为wp-comments-posts.php的文件(文件名称刻意模仿了WordPress的合法文件wp-comments-post.php),向wp-config.php中注入了PHP代码,专门向Googlebot提供垃圾链接和虚假页面,同时对网站所有者保持隐形。 该命令与控制基础设施利用Ethereum智能合约来解析其域名,并查询公共区块链的RPC端点。在这种情况下,传统的域名下线措施无效,因为攻击者可以随时更新智能合约,使其指向新的域名。人们在2026年3月发现的 CanisterWorm区块链供应链攻击 "中也观察到了这一技术。 Ginder通过939个备份快照追溯了时间线,对每日备份数据进行二分搜索,最终将注入时间窗口锁定在了4月6日的6小时44分钟内。他采用的取证方法——对比不同备份日期下wp-config.php文件的大小差异——是任何负责维护生产环境依赖关系的团队均可采用的技术。 在发现此次攻击后,WordPress.org迅速采取了应对措施。插件团队关闭了所有31个插件,推送了一次强制自动更新(v2.6.9.1)以消除“回传”机制,并在仪表盘中添加了警告提示。但此次强制更新并未清除wp-config.php文件中已经植入的代码。也就是说,此前已经遭到入侵的网站将继续发送隐藏的垃圾信息,直到管理员手动检查并修复该文件为止。 人们从这一事件中得到的教训适用于WordPress,也适用于更广泛的生态系统。正如 The Next Web所指出的 ",npm针对自身遭遇的供应链攻击,采取了强制要求高影响度包的维护者启用双因素认证、来源证明以及自动化安全扫描等措施。PyPI也采取了类似的应对措施。尽管WordPress支撑着约43%的网站,却未实施任何这一类的安全防护措施。 这并非什么新伎俩。早在2017年,一个化名“Daley Tias”的买家就曾以15000美元的价格购得Display Widgets插件(安装量达20万次),在其中植入了发薪日贷款垃圾信息,并最终通过相同手段入侵了至少九个插件。本质上,Essential Plugin事件是同一类攻击,只不过规模更大,且采用了更复杂的规避手段。 对于在任何生态系统中使用依赖项的开发者而言,这次事件再次强调了以下几点做法的重要性:固定依赖项版本而非盲目自动更新;密切关注变更日志,留意所有权变更及可疑的“兼容性”更新;审核关键依赖项背后的维护者;将任何所有权转移视为需仔细审查下个版本的信号。 原文链接: https://www.infoq.com/news/2026/05/wordpress-plugins-supply-chain/ "