有人购买了30个WordPress插件,并在其中全部植入了后门

1
分类业界资讯
作者Austin Ginder
来源跳转
发表时间

内容

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

客户报告在 wp-admin 中发现安全警告。

来自 Improve & Grow 的 Ricky 向我们反映,他在客户的 WordPress 仪表盘中看到一个警报。该警告来自 WordPress.org 插件团队,提醒名为 Countdown Timer Ultimate 的插件包含一段代码,可能允许未经授权的第三方访问。

我对该站点进行了全面的安全审计。该插件本身已被 WordPress.org 强制更新至版本 2.6.9.1,理论上应能清除问题。但损害已然造成。

恶意软件隐藏在 wp-config.php 中。

该插件的 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 分钟。

后门在被激活前已潜伏 8 个月。

我通过 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 行。

新增代码引入了三个关键元素:

  • 一个 fetch_ver_info() 方法,该方法调用攻击者服务器上的 file_get_contents() 并将响应传递给 @unserialize()
  • 一个 version_info_clean() 方法,执行 @clean(clean(this->version_cache, $this->changelog),其中所有三个值均来自反序列化的远程数据
  • 一个无需认证的 REST API 端点,其 permission_callback 为 __return_true

这完全符合教科书式的任意函数调用模式。远程服务器控制函数名、参数等一切内容。它在 2026 年 4 月 5-6 日被激活前,已休眠 8 个月。

该插件在 Flippa 上被出售。

事情变得更有趣了。原始插件由 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 提交就是后门代码。

WordPress.org 在同一天关闭了 30+ 个插件。

2026 年 4 月 7 日,WordPress.org 插件团队永久关闭了 Essential Plugin 作者下的所有插件。至少 30 个插件在同一天被关闭。以下是我确认的插件列表:

  • Accordion and Accordion Slider — accordion-and-accordion-slider
  • Album and Image Gallery Plus Lightbox — album-and-image-gallery-plus-lightbox
  • Audio Player with Playlist Ultimate — audio-player-with-playlist-ultimate
  • Blog Designer for Post and Widget — blog-designer-for-post-and-widget
  • Countdown Timer Ultimate — countdown-timer-ultimate
  • Featured Post Creative — featured-post-creative
  • Footer Mega Grid Columns — footer-mega-grid-columns
  • Hero Banner Ultimate — hero-banner-ultimate
  • HTML5 VideoGallery Plus Player — html5-videogallery-plus-player
  • Meta Slider and Carousel with Lightbox — meta-slider-and-carousel-with-lightbox
  • Popup Anything on Click — popup-anything-on-click
  • Portfolio and Projects — portfolio-and-projects
  • Post Category Image with Grid and Slider — post-category-image-with-grid-and-slider
  • Post Grid and Filter Ultimate — post-grid-and-filter-ultimate
  • Preloader for Website — preloader-for-website
  • Product Categories Designs for WooCommerce — product-categories-designs-for-woocommerce
  • Responsive WP FAQ with Category — sp-faq
  • SlidersPack – All in One Image Sliders — sliderspack-all-in-one-image-sliders
  • SP News And Widget — sp-news-and-widget
  • Styles for WP PageNavi – Addon — styles-for-wp-pagenavi-addon
  • Ticker Ultimate — ticker-ultimate
  • Timeline and History Slider — timeline-and-history-slider
  • Woo Product Slider and Carousel with Category — woo-product-slider-and-carousel-with-category
  • WP Blog and Widgets — wp-blog-and-widgets
  • WP Featured Content and Slider — wp-featured-content-and-slider
  • WP Logo Showcase Responsive Slider and Carousel — wp-logo-showcase-responsive-slider-slider
  • WP Responsive Recent Post Slider — wp-responsive-recent-post-slider
  • WP Slick Slider and Image Carousel — wp-slick-slider-and-image-carousel
  • WP Team Showcase and Slider — wp-team-showcase-and-slider
  • WP Testimonial with Widget — wp-testimonial-with-widget
  • WP Trending Post Slider and Widget — wp-trending-post-slider-and-widget

全部被永久关闭。在 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。插件本身继续正常运行。

如果您有我未修补的 Essential Plugin 插件,您可以自行操作。

使用 Claude Code 处理起来很简单。将该文章作为上下文,告诉它您需要修补哪个插件,它可以像我所做的那样剥离 wpos-analytics 模块。所有 Essential Plugin 插件的模式完全相同:

  • 从插件中删除 wpos-analytics/ 目录
  • 在主插件 PHP 文件中删除加载器函数块(搜索 "Plugin Wpos Analytics Data Starts" 或 wpos_analytics_anl)
  • 将 Version: 标头更改为添加 -patched
  • 打包并使用 wp plugin install your-plugin-patched.zip --force 安装

检查您的 wp-config.php

恶意软件会附加在与 require_once ABSPATH . wp-settings.php; 相同的行上,因此快速浏览很容易遗漏。如果您的文件大小明显大于预期(注入的有效载荷增加约 6KB),则该站点已被主动入侵,需要超出简单修补插件的全面清理。

WordPress 插件市场存在信任问题。

两周内发生了两次供应链攻击。两者遵循相同模式:购买具有成熟安装基础的受信任插件,继承 WordPress.org 提交权限,然后注入恶意代码。Essential Plugin 在 Flippa 上的挂牌信息是公开的。买家在 SEO 和赌博营销方面的背景也是公开的。然而,这次收购未经 WordPress.org 的任何审查就通过了。

WordPress.org 没有任何机制可以标记或审查插件所有权转移。没有“控制权变更”通知用户。没有为新提交者触发额外的代码审查。插件团队在攻击被发现后反应迅速。但从后门被植入到被发现,中间隔了 8 个月。

如果您管理 WordPress 站点,请搜索您的舰队中是否有上述列出的 26 个插件 slug 中的任何一个。如果找到,请修补或删除它。并检查 wp-config.php。

评论

(0)
未配置登录方式
暂无评论