🔍 Contexte

Publié le 10 juillet 2026 par Nebula Security sur leur blog de recherche, cet article présente une analyse technique approfondie de CVE-2026-10702, une vulnérabilité découverte par leur agent d’IA VEGA dans le compilateur JIT IonMonkey de SpiderMonkey, le moteur JavaScript de Firefox.

🐛 Nature de la vulnérabilité

La vulnérabilité est une miscompilation JIT (Just-In-Time) résultant d’une modélisation incorrecte des effets de bord dans l’instruction MIR MObjectToIterator. Lorsque skipRegistration_ est activé (via le remplacement scalaire de Object.keys()), l’alias set est incorrectement défini comme un simple chargement (AliasSet::Load(ObjectFields | Element)), alors que l’instruction peut en réalité allouer un nouveau buffer de propriétés dynamiques.

⚙️ Mécanisme d’exploitation

La chaîne d’exploitation repose sur plusieurs étapes :

  • Scalar Replacement : ObjectKeysReplacer remplace Object.keys(obj) par MObjectToIterator avec skipRegistration=true
  • GVN (Global Value Numbering) : considère que MSlots(obj) avant et après MObjectToIterator sont équivalents, éliminant le second appel
  • Use-After-Free : le pointeur Slots#1 devient un dangling pointer après la réallocation du buffer de propriétés
  • Résolution paresseuse : les propriétés Function.name, Function.length et Function.prototype sont résolues lazily via fun_resolve, déclenchant NativeDefineDataProperty et potentiellement une réallocation
  • Primitives addrof/fakeobj : via un spray mémoire contrôlé, la lecture hors-limites permet de récupérer un pointeur de Hidden Class, convertible en pointeur d’objet pour créer un fake Uint8Array et obtenir une lecture/écriture mémoire arbitraire

🎯 Impact

  • Exécution de code arbitraire dans le processus renderer de Firefox
  • Exploitation confirmée également sur Tor Browser
  • Première CVE SpiderMonkey JIT après la mise à jour pré-Pwn2Own de Firefox

🛠️ Correction

La correction consiste à supprimer la méthode getAliasSet() personnalisée de MObjectToIterator, forçant l’utilisation d’un alias set conservateur par défaut. Publiée dans Firefox 151.0.3 le 2 juin 2026.

📅 Timeline

  • 20 mai 2026 : Rapport soumis à Mozilla avec preuve d’exploitation
  • 20 mai 2026 : Accusé de réception et identification de la cause racine par Mozilla
  • 2 juin 2026 : Correctif publié dans Firefox 151.0.3
  • 10 juillet 2026 : Publication de l’article

📄 Type d’article

Publication de recherche technique offensive détaillant une vulnérabilité originale, son mécanisme d’exploitation complet et la correction appliquée, dans le cadre d’une divulgation coordonnée.

🧠 TTPs et IOCs détectés

TTP

  • T1203 — Exploitation for Client Execution (Execution)
  • T1189 — Drive-by Compromise (Initial Access)

IOC

  • CVEs : CVE-2026-10702NVD · CIRCL

Malware / Outils

  • VEGA (tool)

🟡 Indice de vérification factuelle : 39/100 (moyenne)

  • ⬜ nebusec.ai — source non référencée (0pts)
  • ✅ 19177 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 1 IOC(s) (6pts)
  • ⬜ pas d’IOC vérifié (0pts)
  • ✅ 2 TTP(s) MITRE (8pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ 0/1 CVE(s) confirmée(s) (0pts)

🔗 Source originale : https://nebusec.ai/research/ionstack-part-1-cve-2026-10702/