Aller au contenu

CVE-2026-85046 : faille zero-day de confusion de types V8 Maglev/TurboFan dans Google Chromium

HTS

HERMES THREAT SCORE & EXPLOITABILITÉ OPÉRATIONNELLE

Cible : Google Chrome & Moteur V8 Chromium (Windows, macOS, Linux)
Confiance : 99%
95 / 100
EXTRÊME

Mesure la pertinence opérationnelle réelle, la militarisation de l'exploit et la posture de menace active.

Décomposition des dimensions
Exploitabilité 20 / 20
Activité de menace 20 / 20
Militarisation 15 / 20
Exposition 15 / 20
Prévalence 15 / 20
Impact 10 / 20
⚖️ Divergence & Justification opérationnelle

Élevé à 95 EXTREME par Hermes en raison d'une exploitation zero-day confirmée dans la nature, de l'inscription au catalogue CISA KEV (4 septembre 2026) et de son intégration dans des attaques ciblées de type point d'eau (watering hole).

🕸️ Graphe de connaissances connecté & Provenance

CVE-2026-85046: Google Chromium V8 Maglev/TurboFan Type Confusion Zero-DayVULNÉRABILITÉ

Nœuds connectés : 1
Relations sortantes actives
→ affectsCOMPOSANTGoogle Chromium / V8 Engine
98% VERY_HIGH

Software platform affected by security vulnerabilities and agentic attack patterns.

🔍 Pourquoi cette relation ? (Preuves & Provenance)

“Confirmed security vulnerability in Google Chromium / V8 Engine documented in Hermes dossier.”

Preuves vérifiées associées :

Dans les moteurs JavaScript modernes comme V8, la performance repose sur la compilation spéculative. Pour éliminer le surcoût lié au boxing des variables, V8 structure la disposition des objets via des classes internes cachées nommées Maps (v8::internal::Map) et sépare les tableaux d’éléments selon leur typage :

Type d’élémentsDisposition en mémoireÉtat de l’étiquetage de pointeurs (pointer tagging)
PACKED_SMI_ELEMENTSEntiers signés 31 bits densesEntier décalé (valeur << 1, bit de poids faible 0)
PACKED_DOUBLE_ELEMENTSNombres flottants IEEE-754 64 bitsFlottants binaires bruts sans étiquetage
PACKED_ELEMENTSRéférences d’objets, chaînes, symbolesPointeurs compressés 32 bits avec bit de poids faible 1
Architecture du tas V8 et défaillance de transition de types :
Flux normal d'optimisation spéculative :
[Tableau JS initialisé : [1, 2, 3]] ──────► ElementsKind : PACKED_SMI_ELEMENTS
│
Modification du tableau : arr[0] = {} ───► Transition vers : PACKED_ELEMENTS (Pointeurs)
│
Invalidation de boucle par le compilateur JIT :
┌────────────────────────────────────────────────────────────────────────┐
│ Phase Maglev / TurboFan : Élimination de vérification de Map │
│ │
│ Le compilateur suppose que la Map du tableau est invariante : │
│ [DÉFAILLANCE CRITIQUE DE TRANSITION] │
│ Le tableau stocke désormais des pointeurs d'objets │
│ MAIS le JIT conserve la Map : PACKED_SMI_ELEMENTS │
└────────────────────────────────────────────────────────────────────────┘
│
▼
[CONFUSION DE TYPES CRITIQUE (CWE-843)]
Le moteur traite l'adresse d'un pointeur mémoire comme un entier (Smi)
Le moteur traite un entier fourni par l'attaquant comme une adresse mémoire

Le bogue d’inférence de cartes dans Maglev et TurboFan

Section intitulée « Le bogue d’inférence de cartes dans Maglev et TurboFan »

Lors des optimisations avancées de boucles dans les compilateurs Maglev (tier intermédiaire) et TurboFan (optimiseur de pointe), V8 évalue les vérifications de cartes via des nœuds CheckMaps.

Lorsqu’un tableau passe d’un état d’entiers purs à un état d’objets complexes, V8 exécute la routine JSObject::TransitionElementsKind(). Cependant, dans des conditions spécifiques de désoptimisation combinées à des accesseurs de prototypes personnalisés (Object.prototype.__defineGetter__), le compilateur JIT omettait d’émettre l’opérateur de contrôle CheckMaps avant l’écriture en ligne des éléments.

En conséquence :

  1. Élision erronée du contrôle : le code machine compilé continuait d’effectuer des écritures et lectures rapides selon la logique des petits entiers (Smis).
  2. Effet de bord non propagé : un effet de bord modifiait le tampon sous-jacent pour y stocker des références d’objets.
  3. Confusion de déréférencement : l’absence de barrière de validation permettait d’interpréter des pointeurs d’adresses d’objets comme de simples valeurs numériques.

V8 utilisant l’étiquetage de pointeurs (où les entiers ont leur bit 0 à 0, et les pointeurs ont leur bit 0 à 1), lire un pointeur sous forme d’entier permet de fuiter directement l’adresse mémoire du tas (contournement ASLR). À l’inverse, écrire un entier calculé force le moteur à le déréférencer comme un pointeur d’objet valide, donnant naissance aux deux primitives clés de l’exploitation V8 : addrof et fakeobj.

L’exploitation de CVE-2026-85046 nécessite d’amener une cible à visiter une page HTML spécifiquement forgée. La chaîne d’attaque s’exécute intégralement dans le processus de rendu de l’onglet :

L’attaquant conçoit une fonction exécutée dans une boucle chaude afin de forcer sa compilation et son optimisation par TurboFan :

// Schéma conceptuel du déclenchement JIT
function trigger_confusion(arr, val) {
arr[0] = val;
return arr[0];
}
// Entraînement du compilateur JIT pour PACKED_SMI_ELEMENTS
for (let i = 0; i < 20000; i++) {
let smis = [1, 2, 3, 4];
trigger_confusion(smis, 42);
}
// Déclenchement : passage d'un objet alors que le contrôle de Map a été élidé
let target_arr = [1, 2, 3, 4];
let victim_obj = { leak_me: 0x1337 };
trigger_confusion(target_arr, victim_obj);

En lisant la référence d’un objet à travers un tableau que V8 traite comme contenant des entiers Smis, l’adresse brute du pointeur de victim_obj est renvoyée à l’espace JavaScript décalée de 1 bit :

function addrof(obj) {
confused_arr[0] = obj;
// Lecture du pointeur d'objet en tant qu'entier Smi
let tagged_ptr = confused_arr[0];
return tagged_ptr >> 1; // Décalage inverse pour obtenir l'adresse offset 32 bits
}

En écrivant une valeur entière dans un second tableau confus que le moteur considère comme contenant des objets, V8 déréférence l’entier injecté comme un pointeur d’objet actif :

function fakeobj(addr) {
// Injection de l'adresse avec le bit 0 fixé à 1 (tag HeapObject)
confused_arr_obj[0] = (addr << 1) | 1;
return confused_arr_obj[0]; // Retourne la référence vers le faux objet injecté
}

4. Lecture et écriture arbitraires et exécution de shellcode

Section intitulée « 4. Lecture et écriture arbitraires et exécution de shellcode »

Grâce à addrof et fakeobj, l’attaquant forge une fausse structure Float64Array dont le pointeur de données (external_pointer) pointe vers une région arbitraire de la mémoire du processus :

  1. Fuite de l’adresse d’un objet modèle via addrof().
  2. Forgeage d’un faux objet ArrayBuffer dont le tampon pointe vers une table de fonctions ou une zone WebAssembly (rwx).
  3. Écriture directe des instructions shellcode pour obtenir l’exécution de code arbitraire au sein du processus de rendu (renderer).

Chromium isolant chaque site web dans un bac à sable restreint (AppContainer sous Windows, seccomp-bpf sous Linux), les groupes d’attaquants avancés chaînent CVE-2026-85046 avec une faille d’élévation de privilèges du noyau de l’OS (ex. Win32k) pour s’échapper du navigateur et obtenir un contrôle persistant au niveau SYSTEM ou root.

Les équipes de réponse aux incidents (DFIR) enquêtant sur une compromission potentielle doivent surveiller les signaux suivants :

1. Lignée des processus et anomalies comportementales

Section intitulée « 1. Lignée des processus et anomalies comportementales »

L’indicateur le plus franc d’une exploitation réussie de V8 réside dans l’apparition de processus enfants anormaux directement engendrés par le processus de rendu Chromium :

  • Windows : chrome.exe (exécuté avec l’argument --type=renderer) engendrant cmd.exe, powershell.exe, wscript.exe, certutil.exe ou rundll32.exe.
  • Linux : les workers de bac à sable Chromium engendrant /bin/sh, /bin/bash ou ouvrant des connexions réseau sortantes non sollicitées.
  • macOS : les processus auxiliaires Google Chrome engendrant /bin/zsh, curl ou osascript.
Lignée normale :
[explorer.exe] ──► [chrome.exe (Parent Navigateur)] ──► [chrome.exe (--type=renderer)]
Lignée compromise (échappement de bac à sable / injection) :
[chrome.exe (--type=renderer)]
│
├─► [svchost.exe (Injection de thread / Process Hollowing)]
└─► [cmd.exe /c powershell.exe -enc <Charge Utile Base64>]

Inspectez les rapports d’erreur Crashpad situés dans :

  • C:\Users\<utilisateur>\AppData\Local\Google\Chrome\User Data\Crashpad\reports\
  • Signatures d’exception STATUS_ACCESS_VIOLATION (0xC0000005) ciblant des plages mémoires JIT V8 (0x00007ff*).
  • Altération des pointeurs de Map dans les vidages de mémoire du tas JavaScript.

Liens croisés : cyber-renseignement et playbooks associés

Section intitulée « Liens croisés : cyber-renseignement et playbooks associés »
Référence du recueilPérimètre d’analyseAlignement et impact opérationnel
Triage EDRTriage des alertes EDRQualification et confinement des processus suspects issus des navigateurs web.
Courtiers d’accèsCourtiers d’accès initial (IAB)Utilisation des failles de navigateurs pour l’accès initial et la revente d’accès.
Studio interactifAgentThreat StudioModélisation des moteurs de rendu web comme périmètres non fiables dans les architectures IA.
Étude comparativeLimites de rétro-ingénierie SRE-BenchAnalyse des techniques avancées d’analyse de binaires et de décompilation JIT.
title: Processus de rendu Chrome engendrant un interpréteur suspect (CVE-2026-85046)
id: f98a72b1-4089-4e2b-b850-460000085046-fr
status: stable
description: Détecte la création de processus fils anormaux par un processus de rendu Chrome ou Chromium, symptomatique d'une exploitation de type CVE-2026-85046.
references:
- https://chromereleases.googleblog.com/2026/09/stable-channel-update-for-desktop.html
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog
author: Équipe de détection Hermes Codex
date: 2026-09-08
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\brave.exe'
- '\opera.exe'
ParentCommandLine|contains: '--type=renderer'
selection_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\rundll32.exe'
- '\regsvr32.exe'
- '\mshta.exe'
- '\certutil.exe'
condition: selection_parent and selection_child
falsepositives:
- Outils internes rares d'automatisation de tests web (vérifier la ligne de commande).
level: critical
tags:
- attack.execution
- attack.t1203
- attack.t1059.001
- cve.2026.85046

Les organisations doivent immédiatement mettre à niveau tous les postes de travail vers les versions corrigées :

NavigateurPlateformeVersion corrigée minimale
Google ChromeWindows / macOS152.0.7977.82 ou 152.0.7977.83
Google ChromeLinux152.0.7977.82
Microsoft EdgeWindows / macOS / Linux152.0.3540.84 ou supérieure
Brave BrowserToutes plateformesVersion 1.82.164 (Chromium 152.0.7977.82)
OperaToutes plateformesVersion 118.0.5432.48 ou supérieure
  • Activer l’isolation stricte de sites : forcer --site-per-process par stratégie GPO / MDM pour isoler rigoureusement les origines web dans des processus distincts.
  • Vérifier l’activation de V8SANDBOX : s’assurer que la sandbox en mémoire du moteur V8 (--enable-v8-sandbox) n’a pas été désactivée par des drapeaux expérimentaux.
  • Surveillance EDR Active : maintenir des règles d’alerte immédiate sur tout processus dérivé des processus enfants des navigateurs.