
Preuve de concept pour CVE-2026-2441, un use-after-free CSS dans Chrome menant à une exécution de code à distance (RCE) dans le renderer sandboxé. Inclut trois méthodes de déclenchement, le grooming du tas et une analyse détaillée.
CVSS 8.8 (Élevé) | Exploité activement dans la nature | Exécution de code à distance dans le rendu (Sandboxé)
Une vulnérabilité use-after-free dans le moteur CSS Blink de Google Chrome qui permet à un attaquant distant d'exécuter du code arbitraire dans le sandbox du navigateur via une page HTML conçue à cet effet.
| Champ | Valeur |
|---|
| CVE | CVE-2026-2441 |
| CVSS | 8.8 (Élevé) |
| Type | Use-After-Free (CWE-416) |
| Composant | Blink CSS — CSSFontFeatureValuesMap |
| Fichier source | third_party/blink/renderer/core/css/css_font_feature_values_map.cc |
| Commit de correction | 63f3cb4864c64c677cd60c76c8cb49d37d08319c |
| Signaleur | Shaheen Fazim (2026-02-11) |
| Date du correctif | 2026-02-13 |
| Dans la nature | Oui — Google a confirmé une exploitation active |
| Plateforme | Vulnérable | Corrigé |
|---|---|---|
| Windows / macOS (Stable) | < 145.0.7632.75 | >= 145.0.7632.75 |
| Linux (Stable) | < 144.0.7559.75 | >= 144.0.7559.75 |
| Windows / macOS (Stable étendu) | < 144.0.7559.177 | >= 144.0.7559.177 |
| Navigateurs basés sur Chromium (Edge, Brave, Opera, Vivaldi) | Consulter l'avis du fournisseur | Variable |
FontFeatureValuesMapIterationSource stockait un pointeur brut (const FontFeatureAliases* aliases_) vers la HashMap interne FontFeatureAliases. Lorsque la map est modifiée pendant l'itération via set() ou delete(), la HashMap est ré-hashée — allouant un nouveau stockage et libérant l'ancien. Le pointeur brut devient dangereux (dangling), et le prochain appel à FetchNextItem() lit de la mémoire libérée.
CreateIterationSource()
→ FontFeatureValuesMapIterationSource(map, aliases_)
→ aliases_ = pointeur brut vers la HashMap interne
→ iterator_ = aliases_->begin()
FetchNextItem()
→ lit iterator_->key (via aliases_)
Si map.set() / map.delete() est appelé entre les itérations :
→ La HashMap est ré-hashée (nouvelle allocation, ancienne libérée)
→ aliases_ → pointeur dangereux (dangling)
→ iterator_ → invalidé
→ Prochain FetchNextItem() → USE-AFTER-FREE
- const FontFeatureAliases* aliases_; // pointeur brut → dangereux après ré-hashage
+ const FontFeatureAliases aliases_; // copie profonde → insensible au ré-hashage
Le correctif remplace le pointeur brut par une copie profonde de la HashMap. Même si la map d'origine est ré-hashée, l'itérateur opère sur sa propre copie, empêchant le pointeur dangereux.
poc.html dans une version vulnérable de Chrome (< 145.0.7632.75)| Version de Chrome | Comportement attendu |
|---|---|
| < 145.0.7632.75 (non corrigé) | Crash du rendu — STATUS_ACCESS_VIOLATION (Windows) ou SIGSEGV (Linux/macOS). Chrome affiche l'erreur « Impossible d'ouvrir cette page ». |
| >= 145.0.7632.75 (corrigé) | Pas de crash — la PoC s'exécute jusqu'au bout, toutes les entrées sont lues normalement. |
Lorsqu'elle est ouverte dans une version vulnérable de Chrome, le processus de rendu plante avec STATUS_ACCESS_VIOLATION :
Impossible d'ouvrir cette page
Code d'erreur : STATUS_ACCESS_VIOLATION
Cela confirme que l'UAF est déclenchée — le pointeur dangereux accède à de la mémoire libérée/non mappée, provoquant la terminaison du processus de rendu.
La PoC déclenche l'UAF via trois méthodes indépendantes :
entries() + boucle de mutationconst iterator = map.entries();
while (step < 20) {
iterator.next(); // lecture via le pointeur (désormais dangereux)
map.delete(key); // déclenche le ré-hashage
for (i = 0; i < 512; i++)
map.set("spray_" + i, [i]); // force la réallocation
}
for...of + mutation concurrentefor (const [k, v] of map) {
map.delete(k);
for (i = 0; i < 512; i++)
map.set("alt_" + i, [i]);
}
requestAnimationFrame + recalcul de mise en pagefunction rafTrigger() {
document.body.offsetWidth; // force le recalcul de mise en page
const result = iterator.next();
map.delete(k);
for (i = 0; i < 512; i++)
map.set("raf_" + i, [i]);
requestAnimationFrame(rafTrigger);
}
Chaque méthode inclut également un grooming du tas (heap grooming) — allouant 50 règles @font-feature-values de même taille pour rendre la disposition du tas prévisible en vue d'une exploitation potentielle.
document.cookie, localStorage, sessionStorage, valeurs des champs de formulairefetch() / WebSocket / sendBeacon()addEventListener('keydown')Lorsqu'elle est combinée à une vulnérabilité distincte d'évasion du sandbox :
RCE du rendu (CVE-2026-2441)
→ Exploitation Mojo IPC → RCE du processus navigateur
→ Exploitation du noyau → Compromission totale du système
→ Installation de malware / ransomware / logiciel espion
→ Accès au système de fichiers, mouvement latéral, persistance
Chaînes d'exploitation réelles utilisant des UAF similaires dans les navigateurs :
Cette vulnérabilité est exploitable via un téléchargement furtif (drive-by download) — aucune interaction de l'utilisateur au-delà de la visite d'une page malveillante n'est requise :
chrome://flags/#site-isolation-trial-opt-out)| Date | Événement |
|---|---|
| 2026-02-11 | Vulnérabilité signalée par Shaheen Fazim |
| 2026-02-13 | Google publie Chrome 145.0.7632.75/76 (Windows/macOS), 144.0.7559.75 (Linux) |
| 2026-02-13 | Google reconnaît une exploitation dans la nature |
| 2026-02-16 | Vivaldi et Opera publient des correctifs |
Si vous trouvez cette recherche utile, pensez à m'offrir un café :
Cette preuve de concept est fournie uniquement à des fins éducatives et de recherche en sécurité autorisée. L'utilisation de cette PoC contre des systèmes sans autorisation explicite est illégale et contraire à l'éthique. L'auteur n'est pas responsable de toute utilisation abusive.
MIT