从零到计算器仅需六天:深入了解XBOW的Chrome全链
最终链条结合了V8编译器错误、动画WebP解码器错误和Crashpad中的内存安全错误。它们共同将普通Chrome标签页中的JavaScript执行转变为渲染器沙箱外的代码执行。谷歌根据2026年4月引入的VRP规则授予了该链条首个250,000美元的Chrome全链奖励。我们将单独发布关于奖励及其对XBOW意义的公告。本文讨论了漏洞:它跨越的边界、每个漏洞的根本原因以及连接它们的接口。一个在签名Chrome Beta中的网页通过XBOW的全链漏洞启动计算器。谈论速度和攻击性加速是一回事,亲身体验又是另一回事。在LLM之前,制作一个Chrome全链需要四人的团队花费约6-9个月,而我们的首次提交仅用了2个月。获奖的链条?六天。即使对于我们来说,这种速度也非常具有挑战性,因为我们试图理解安全性如何变化。我们在六天内构建了这一链条,从8月2日的星期日到8月7日的星期五。我们没有要求一个代理从头到尾产生一个漏洞,而是将工作划分为多个具有狭窄目标的平行活动:广泛的漏洞搜索、V8内存损坏、V8沙箱逃逸、渲染器沙箱逃逸以及集成。使用OpenAI的gpt-5.6-sol模型的AI代理搜索源代码、测试假设、构建概念证明并开发漏洞阶段;XBOW研究人员则选择目标、提供背景、挑战结果、重定向搜索,并决定哪些组件相互连接。我们还开发了备份路线,并为每个阶段提供了一个干净的接口,以便我们能够在不重建其余漏洞的情况下更换一个组件。根据归档的Codex日志重构使用情况估计这六天的活动大约花费了40,000美元的API费用。我们将在十月底的Unprompted中介绍时间表和编排;在这里,我们重点讨论连接这些漏洞及其漏洞机制的全链背景:V8和渲染器沙箱。V8首先包含JavaScript引擎损坏,发生在进程内沙箱中。大多数JavaScript堆对象位于保留的4GiB区域内,许多指针表示为该区域内的偏移量。对本地对象和可执行代码的引用受到额外保护。因此,V8内存损坏错误可以使攻击者在笼子内获得广泛的控制,而不立即导致本地代码执行。V8在《V8沙箱》中描述了这一设计。Chrome随后在操作系统进程沙箱中包含渲染器本身。即使攻击者在渲染器中拥有本地代码执行,也无法自由访问机器的其余部分。Chromium的沙箱设计文档描述了这一外部边界。该链条在三个漏洞阶段跨越了这两个边界: 阶段 漏洞 获得的能力 JavaScript 引擎 Maglev在去优化时重用了可变的盒装数字 在V8的指针压缩笼内的读写访问 V8沙箱 动画WebP将缓存几何体与更改的图像字节结合 在笼外进行一个选择的本地写入 渲染器沙箱 Crashpad将来自所谓冻结的渲染器的失败读取视为稳定观察 在未沙箱的崩溃处理程序中执行代码 动画WebP阶段是一个V8沙箱逃逸,但我们没有直接攻击沙箱本身,而是利用了V8沙箱故意不执行的一个属性,Blink错误地假设可以信任这个属性。最后,漏洞使用Crashpad中的溢出来跨越最后的外部进程边界,实现主机上的未沙箱代码执行。 阶段1:改变不可变的 第一个漏洞出现在Maglev中,V8的中间优化编译器。要理解这一点,我们需要查看去优化。优化代码在处理的值和对象上进行假设。当假设在运行时不再成立时,V8必须重建普通的JavaScript对象并继续在不太专业的代码中运行。有些对象在优化代码运行时从未存在于内存中;编译器仅将它们表示为值。去优化必须将它们物化。具有双重表示的JavaScript对象字段在V8物化对象时需要一个HeapNumber。脆弱的Maglev路径为虚拟值创建了一个旧空间HeapNumber,并将对象本身存储在去优化文字数组中: void BuildHeapNumber(const VirtualObject* vobject) { DCHECK_EQ(vobject->object_type(), vobj::ObjectType::kHeapNumber); ValueNode* value_node = vobject->get(offsetof(HeapNumber, value_)); return BuildHeapNumber(value_node->Cast<Float64Constant>()->value()); } void BuildHeapNumber(Float64 number) { DirectHandle<Object> value = local_isolate_->factory()->NewHeapNumberFromBits<AllocationType::kOld>( number.get_bits()); translation_array_builder_->StoreLiteral(GetDeoptLiteral(*value)); } 那段代码来自易受攻击的ma...
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡