CVE-2025-6554
CVE-2025-6554是Chrome V8(JavaScript引擎)解释器中的一个漏洞(空洞检查不足,在带有可选链的表达式中对意外变量的控制不充分)。POC(CVE-2025-6554-POC.JS)探索了在使用变量前的"空洞"验证机制中的一个缺陷,允许读取通常被引用阻止的未初始化值行为。
|
|
技术解释
1. 漏洞代码结构
let x; 和 let y; 声明了局部作用域变量。 Delete X?. [Y]?. 使用可选链安全访问嵌套属性。 问题:变量Y在声明前被使用,这应该引发引用错误,但在修补前的V8中,这会静默失败,允许它捕获称为"The Hole"的特殊值(TDZ变量的标记-暂时性死区)。 代码中的返回值(return Y)本不应可访问,因为Y仍在TDZ中。但该失败允许了这一点。
2. 补丁前的行为
避免访问TDZ中变量的机制是ThrowReferenceErrorIfHole。 在补丁前,该机制仅在Delete X?. [Y]?期间被调用一次。 V8内部标记变量Y已经被验证为"不是空洞",但该验证脱离了受控作用域,因此在return y期间未重新评估。
3. 修复内容
补丁在return Y上添加了另一个对ThrowReferenceErrorIfHole的强制调用,确保任何在语句前访问Y的尝试都会正确触发错误。 该验证由ScopeCheckScope保证,它被包含在所有对OptionalChainNullLabelScope的调用中。
攻击流程
|
|
攻击者在捕获此"The Hole"时,可以推断V8引擎的内部状态,促进诸如以下攻击:
-
类型混淆利用
-
堆栈操作
-
作用域检查绕过