文章总结: Brevo于2026年9月14日遭供应链攻击,攻击者利用泄露的CloudflareAPI密钥在CDN边缘部署恶意Worker,注入客户网站脚本约5小时29分钟,并通过仿冒验证页诱导用户执行恶意命令。事件暴露长期密钥与权限过大的风险,建议企业审计CDNWorker、路由及DNS变更记录,启用CSP报告模式并加强第三方脚本管理。
综合评分: 88
文章分类: 供应链安全,应急响应,安全运营,社会工程学,威胁情报
网站文件没改,访客却被诱导运行命令:Brevo边缘注入复盘
原创
tcode
tcode
字节脉搏实验室
2026年9月20日 10:33
北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
网站管理员当天没有发布新版本,源站文件哈希也没有变化,但访客浏览器收到的JavaScript已经被改写。2026年9月14日,Brevo发布的事件复盘确认,一名攻击者使用泄露的Cloudflare API密钥,在其边缘网络部署了恶意Worker,导致嵌入客户网站的表单脚本、会话组件和SDK加载器在一段时间内被动态注入。部分访客看到仿冒的“验证你是真人”页面,并被引导在电脑上执行一条命令。
这不是常见的“网站被上传后门”事件。代码没有被塞进客户服务器,而是在用户请求经过CDN时被临时替换。Brevo给出的影响窗口是2026年9月14日15时01分至20时30分UTC,约5小时29分钟;其中对客户侧嵌入JavaScript的注入从16时07分UTC开始。对只看服务器目录、代码仓库和文件完整性的人来说,这段时间恰好是最容易漏报的盲区。
5小时29分钟里,攻击路径没有经过源站
Brevo的复盘把起点指向一枚长期有效的Cloudflare API密钥。该密钥拥有完整账户权限,却被存放在应用源代码中。攻击者获得它以后,可以创建Worker、配置路由并修改DNS记录。Worker运行在CDN边缘,能在响应返回访客前重写内容,因此客户源站看到的仍是原文件,真正执行恶意逻辑的却是经过边缘节点的响应。
官方披露的受影响入口包括brevo.com、sibforms.com、Brevo表单脚本、Conversations会话组件和SDK加载器。Brevo同时说明,app.brevo.com应用、API、邮件发送能力以及保存在Brevo内部的客户数据没有受到这次事件影响。这个区分很重要:脚本分发链路被改写,不等于Brevo所有业务系统和客户数据库都已失陷。
攻击者还删除了响应中的Content-Security-Policy头。CSP原本可以限制页面能加载和执行哪些脚本,并在出现未授权资源时产生报告。头部被移除后,浏览器少了一道可见的约束。对防守方来说,这解释了一个矛盾现象:静态代码扫描显示正常,但真实浏览器已经执行了外来代码。
注入内容不是在所有访问中都出现。Sansec的取证报告称,它监测的12个站点在事件窗口内收到2,549条CSP违规报告,并据此估算超过10万个客户网站受到影响。这个数量是第三方测量,Brevo没有确认10万这一数字。能确定的是攻击确实影响了客户侧脚本分发;不能把估算值写成厂商确认的受害站数量,也不能从访问次数直接推导出已经运行恶意命令的人数。
假验证页利用的是用户对“系统操作”的信任
被注入的页面会向选中的访客展示仿冒Cloudflare验证界面,提示用户按Win+R打开运行框,再按Ctrl+V粘贴命令并回车。用户以为自己是在完成人机验证,实际上粘贴的内容会下载恶意程序。这类社会工程通常被称为ClickFix:它不要求浏览器漏洞,而是让用户亲手完成最后一步。
对WordPress站点,攻击者还准备了另一条路径。Sansec称,嵌入Brevo组件的站点中,恶意脚本会尝试在已登录管理员访问页面时安装并激活插件。插件安装请求使用了管理员现有会话和权限,因此从WordPress视角看,它像一次正常后台操作。插件安装后还可以隐藏自己,仅凭后台列表不一定能发现。
这里最值得复盘的并不是“某个第三方组件有漏洞”,而是信任边界已经移动。企业通常能审计自己的代码、依赖和服务器,却常常说不清页面上有多少外部脚本、由谁控制、何时会变化,以及脚本供应商的上游密钥怎样管理。浏览器执行这些脚本时,它们拥有与站内第一方代码接近的能力,可以读取页面、表单和存储,也可以向外部地址发送请求。
真正需要回看的,是窗口期和安装链
如果站点在2026年9月14日嵌入了Brevo表单、会话组件或SDK,第一步应核对访问日志。重点查看当天是否出现对 /wp-admin/update.php?action=upload-plugin 的POST请求,以及随后对 /wp-admin/plugins.php?action=activate 的GET请求。路径相同不代表一定恶意,还要结合操作者、来源IP、时间、插件文件和前后会话判断。
第二步是把磁盘目录和WordPress后台插件列表做交叉核对。攻击者安装的插件可能隐藏自身,因此不能只看后台页面。检查新增目录、修改时间、可疑外联域名和计划任务,并与站点管理员确认9月14日是否执行过安装。若无法确认插件来源,应先隔离文件、保留日志,再决定清理顺序。
第三步是处理终端。任何在假验证页按提示执行过命令的电脑,都不应只做一次浏览器清理。更稳妥的做法是立即断开网络、保存必要证据、进行完整恶意软件扫描,并更换在该设备上使用过的密码和会话令牌。具体损失取决于实际下载内容,公开材料没有给出所有受害终端的统一结果。
最后要检查云控制面。既然攻击者能够创建Worker、路由和DNS记录,就不能只删除前端脚本。应审计Cloudflare账户的登录、API令牌、Worker部署、路由和DNS变更记录,确认没有遗留令牌、后门路由或异常域名,再轮换相关密钥并启用持续审计。
长期密钥才是这次事件的核心资产
Brevo在复盘中表示,已经将密钥迁移到Vault,改用短时、按权限划分的令牌,持续导出Cloudflare审计日志,并增加外部内容完整性扫描。这些动作指向同一个结论:供应商可以把前端组件做得很小,但只要云账户令牌长期有效且权限过大,一次源码泄露就可能换来整个边缘分发链路。
对企业用户而言,供应商安全问卷不应只问“是否使用CDN”和“是否有SOC 2”。还应追问:生产密钥保存在哪里,令牌有效期多长,能否只允许修改指定Worker,Worker和DNS变更是否实时告警,客户侧脚本变化能否在两小时内定位。若这些问题没有可验证答案,第三方脚本清单就只是静态名单。
更直接的自查可以从CSP报告模式开始。它不会阻断页面,只记录浏览器实际尝试加载和执行的资源。先连续收集数天,建立域名、脚本哈希、页面和业务用途的清单,再决定哪些必须放行、哪些可以删除。对于支付和登录页面,应进一步设置哈希或nonce,并让未授权变化触发告警,而不是等爬虫下一次扫描。
这次事件的可核验部分已经足够明确:长期全权限密钥、CDN边缘改写、CSP被移除、客户脚本被注入,以及9月14日约5小时29分钟的影响窗口。仍不确定的部分包括具体受害者数量、实际下载的恶意程序种类,以及多少终端真的执行了命令。承认这些边界,才能把排查重点放在可验证的日志和文件变化上。
如果网站供应商明天说“我们的代码没有改”,可以直接追问:“请给出9月14日16时至21时UTC的CDN Worker、路由和DNS变更记录,以及客户页面脚本哈希的变化清单。”答案不完整,就不能把“源站正常”当成“访客没有受到影响”。
热点来源
来源:Brevo官方复盘:2026-09-17,https://status.brevo.com/incidents/01M2QBC4EZ24ZACW6SWQYVW8N3/write-up
来源:Brevo Status事件页:2026-09-14,https://status.brevo.com/incidents/01M2QBC4EZ24ZACW6SWQYVW8N3
来源:Sansec取证分析:2026-09,https://sansec.io/research/brevo-supply-chain-attack
来源:SecurityWeek补充报道:2026-09-18,https://www.securityweek.com/brevo-supply-chain-attack-injects-malware-into-100000-websites/
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:字节脉搏实验室 tcode
tcode《网站文件没改,访客却被诱导运行命令:Brevo边缘注入复盘》