đ Contexte
Publié le 28 mars 2026 sur le blog de recherche QriouSec, cet article présente une analyse technique approfondie de la vulnérabilité CVE-2025-14325, découverte dans le moteur JavaScript SpiderMonkey de Mozilla Firefox. La découverte a été facilitée par du fuzzing assisté par IA (Claude Code) ciblant la fonctionnalité TypedArray resizable.
đ VulnĂ©rabilitĂ© : Type Confusion dans le JIT Baseline
La vulnĂ©rabilitĂ© rĂ©side dans le mĂ©canisme des inline caches (IC) du tier Baseline JIT de SpiderMonkey. Le flux d’exploitation repose sur une fenĂȘtre de rĂ©-entrance :
- [1] Snapshot de la forme (
oldShape) de l’objet avant l’opĂ©ration - [2-3] Tentative d’attachement d’un stub IC diffĂ©rĂ©
- [4] ExĂ©cution de l’opĂ©ration VM â peut dĂ©clencher du JavaScript arbitraire via
valueOf() - [5-6] Attachement différé via
tryAttachAddSlotStub(oldShape)
Durant l’Ă©tape [4], un callback valueOf() appelle SharedArrayBuffer.prototype.grow(), ce qui Ă©tend la longueur d’un TypedArray redimensionnable. Un index prĂ©cĂ©demment hors-limites devient alors valide, retournant un TypedArrayElement au lieu d’un NativeProperty.
âïž MĂ©canisme de la confusion de types
La classe PropertyResult utilise une union C++ pour stocker le rĂ©sultat d’une recherche de propriĂ©tĂ© :
propInfo_(32 bits) pourNativePropertytypedArrayIndex_(64 bits) pourTypedArrayElement
En build release, l’assertion MOZ_ASSERT(isNativeProperty()) dans propertyInfo() est compilĂ©e hors, permettant la lecture des 32 bits infĂ©rieurs de typedArrayIndex_ comme un PropertyInfo. Le numĂ©ro de slot contrĂŽlĂ© est ensuite gravĂ© dans le stub IC.
đŻ Contournement du MOZ_RELEASE_ASSERT
Pour passer la garde [9], les 32 bits inférieurs de typedArrayIndex_ doivent correspondre à slotAndFlags_ de la derniÚre propriété. Par exemple :
đ„ Exploitation
L’exploitation complĂšte comprend :
- Stage 1 (Information Leak) : Lecture de slots arbitraires via le stub IC corrompu pour fuiter des adresses mémoire
- ContrĂŽle du GC : Utilisation de
minorgc()et d’allocations massives d’ArrayBufferpour contrĂŽler le ramasse-miettes (minor/major GC) - Le stub IC corrompu permet une Ă©criture hors-limites sur le buffer de slots dynamiques de l’objet, menant Ă une exĂ©cution de code arbitraire
đ Type d’article
Il s’agit d’une analyse technique et d’un rapport de vulnĂ©rabilitĂ© dĂ©taillant la dĂ©couverte, le mĂ©canisme interne et le scĂ©nario d’exploitation complet de CVE-2025-14325 dans Firefox/SpiderMonkey.
đ§ TTPs et IOCs dĂ©tectĂ©s
TTP
- T1203 â Exploitation for Client Execution (Execution)
- T1587.004 â Develop Capabilities: Exploits (Resource Development)
IOC
- CVEs :
CVE-2025-14325 - Chemins :
js/src/jit/BaselineIC.cpp - Chemins :
js/src/vm/PropertyResult.h - Chemins :
js/src/gc/Nursery.cpp - Chemins :
js/src/gc/GC.cpp
đ Source originale : https://qriousec.github.io/post/cve-2025-14325/