Brevo 供应链攻击预警:Cloudflare API 密钥失守,超 10 万网站被植入 ClickFix

营销与客户沟通平台 Brevo(原 Sendinblue)确认遭到供应链攻击。攻击者利用一枚硬编码在应用源码中、具备完整账户权限的长效 Cloudflare API 密钥,在 CDN 边缘部署恶意 Worker,向 brevo.com 及超过 10 万家使用其组件的外部网站注入 ClickFix 脚本,并向处于登录状态的 WordPress 管理员静默安装后门插件。

事件概述

事件分为两个阶段。9 月 10 日,攻击者利用其 SAML 单点登录实现中的缺陷,取得 138 个客户账户访问权,其中一个属于硬件钱包厂商 Trezor,另用 6 个账户发送钓鱼邮件并从 43 个账户导出联系人数据。

9 月 14 日,攻击者再次返回,改用一枚长效 Cloudflare API 密钥部署恶意 Worker。Sansec 最先报告该活动,估计恶意脚本在约 16:05 至 20:13 UTC 之间下发,受影响网站超过 10 万个。

技术细节

攻击的关键在于绕过常规完整性校验。Brevo 披露,被滥用的 API 密钥具备完整账户权限并硬编码在应用源码中,允许攻击者在其 Cloudflare 各 zone 内创建 Worker、路由与 DNS 记录而不触发告警。由于 Worker 在边缘重写响应并移除 Content-Security-Policy 等安全响应头,源站服务器与磁盘文件始终未被修改,基于文件比对的完整性检查无法发现差异。

被篡改对象包括 brevo.com、sendinblue.com、sibforms.com 及客户嵌入自有站点的 Brevo Forms 与 Conversations 聊天挂件、SDK 加载脚本。访问者会看到伪造的 Cloudflare「验证你是人类」页面,随后被诱导在 Windows 上执行命令,即 ClickFix 手法。

在嵌入了 Brevo 组件的 WordPress 站点上,脚本还会判断访问者是否为已登录管理员,并尝试从 cdn10.sendibt1[.]com 拉取并安装插件。该插件伪装为 Web Media Optimizer,可从插件列表隐藏自身、复制到 mu-plugins 目录持久化,并定期回连 glegchner[.]com;插件内置硬编码认证密钥,可在不知管理员密码的情况下构造有效登录会话。

影响评估

事件的特殊性在于攻击面来自客户站点已经信任的代码。其表单、聊天挂件被大量中小企业官网嵌入,对站长而言风险不在于自身服务器被入侵,而在于访客在站点上被诱导执行命令。当前无公开 CVE 编号,自动化漏洞管理平台无法感知,只能靠站点侧手工排查。

9 月 10 日的账户接管与 9 月 14 日的密钥滥用是否同源,Brevo 未予确认。

修复建议

  • 比对磁盘文件与后台插件列表。后门插件会从列表隐藏,仅看后台不可信,需核对 wp-content/pluginsmu-plugins 目录。
  • 检查 9 月 14 日前后是否有非预期的插件安装、激活记录,并核查主机访问日志。
  • 确认站点嵌入的 Brevo 脚本已恢复为官方当前版本,必要时强制清理 CDN 与浏览器缓存。
  • 任何在 9 月 14 日按页面提示在终端执行过命令的人员,应立即离线或进入安全模式全盘查杀,并从另一台可信设备修改相关口令。
  • 结构性加固:不应授予下游系统可改写响应体、删除安全响应头的边缘权限;第三方密钥须最小权限与有效期,禁止硬编码入库。

第三方嵌入组件属于主动攻击面,不能假定厂商代码不变,应监控 CDN 边缘响应变更。

参考来源