CVE-2025-11711CVE-2025-11711是Mozilla Firefox和Thunderbird浏览器中JavaScript引擎(SpiderMonkey)存在的一个安全漏洞。该漏洞允许攻击者修改本应被标记为非可写(non-writeable)的JavaScript对象属性的值。正常情况下,JavaScript对象的某些属性通过属性描述符(property descriptor)被设置为不可写,以保护对象内部状态不被外部代码篡改。然而,由于SpiderMonkey引擎在处理属性定义或属性访问时存在缺陷,攻击者可以通过特定的方式绕过这一保护机制,成功修改非可写属性的值。
该漏洞由Mozilla安全团队([email protected])发现并报告,CVSS 3.1评分为6.5分,属于中危级别。虽然该漏洞需要用户交互(如访问恶意网页)才能触发,但由于其影响完整性(Integrity Impact为High),攻击者可能利用此漏洞绕过浏览器内部安全机制,进一步实施更复杂的攻击。该漏洞已在Firefox 144、Firefox ESR 115.29、Firefox ESR 140.4、Thunderbird 144和Thunderbird 140.4中得到修复。
此漏洞的危害在于,JavaScript对象的非可写属性通常用于实现安全沙箱、保护敏感内部状态或维护对象的不变性。一旦这些保护被绕过,攻击者可能修改浏览器内部对象的行为,导致安全策略被绕过、沙箱逃逸或在特定场景下实现远程代码执行。
该漏洞位于Mozilla Firefox使用的SpiderMonkey JavaScript引擎中,涉及对象属性的可写性(writability)检查机制。
**漏洞原理:**
在JavaScript中,对象属性可以通过属性描述符(PropertyDescriptor)来定义其特性,包括writable(可写性)、configurable(可配置性)、enumerable(可枚举性)和value(值)。当一个属性被设置为writable: false时,常规的赋值操作应当被静默忽略(在非严格模式下)或抛出TypeError异常(在严格模式下)。
SpiderMonkey引擎在处理属性定义和属性赋值时,可能存在以下几种缺陷场景:
1. **JIT编译器优化缺陷**:SpiderMonkey的JIT(即时编译器)在优化过程中可能错误地省略了对属性可写性的检查,导致即使属性被标记为non-writeable,赋值操作仍然能够成功修改属性值。
2. **属性描述符处理缺陷**:在处理Object.defineProperty、Object.freeze等API时,引擎可能未能正确维护属性的可写性标志。
3. **内部slot访问缺陷**:某些内置对象(如TypedArray、ArrayBuffer等)使用内部slot来存储数据,如果引擎未能正确区分外部属性访问和内部slot访问,可能导致非可写属性的值被意外修改。
**利用方式:**
攻击者需要诱导用户访问一个包含恶意JavaScript代码的网页。当恶意脚本执行时,它会尝试修改一个本应不可写的对象属性。如果漏洞存在,修改将成功,攻击者可以利用这一点来:
- 修改浏览器内部安全相关对象的属性
- 绕过内容安全策略(CSP)
- 篡改TypedArray的length属性导致越界访问
- 修改Object.prototype的属性实现原型链污染