
Proof-of-concept per CVE-2026-2441, un use-after-free nel motore CSS di Chrome, che dimostra il crash del renderer e la potenziale esecuzione di codice in sandbox tramite HTML appositamente predisposto.
CVSS 8.8 (Alto) | Sfruttata attivamente in natura | RCE nel Renderer (Sandboxed)
Una vulnerabilità use-after-free nel motore CSS Blink di Google Chrome che consente a un attaccante remoto di eseguire codice arbitrario all'interno della sandbox del browser tramite una pagina HTML appositamente predisposta.
| Campo | Valore |
|---|
| CVE | CVE-2026-2441 |
| CVSS | 8.8 (Alto) |
| Tipo | Use-After-Free (CWE-416) |
| Componente | Blink CSS — CSSFontFeatureValuesMap |
| File Sorgente | third_party/blink/renderer/core/css/css_font_feature_values_map.cc |
| Commit di Fix | 63f3cb4864c64c677cd60c76c8cb49d37d08319c |
| Segnalatore | Shaheen Fazim (2026-02-11) |
| Data della Patch | 2026-02-13 |
| In-the-Wild | Sì — Google ha confermato lo sfruttamento attivo |
| Piattaforma | Vulnerabile | Corretta |
|---|---|---|
| Windows / macOS (Stabile) | < 145.0.7632.75 | >= 145.0.7632.75 |
| Linux (Stabile) | < 144.0.7559.75 | >= 144.0.7559.75 |
| Windows / macOS (Stabile Estesa) | < 144.0.7559.177 | >= 144.0.7559.177 |
| Browser basati su Chromium (Edge, Brave, Opera, Vivaldi) | Consultare l'avviso del vendor | Variabile |
FontFeatureValuesMapIterationSource memorizzava un puntatore grezzo (const FontFeatureAliases* aliases_) alla HashMap interna FontFeatureAliases. Quando la mappa viene modificata durante l'iterazione tramite set() o delete(), la HashMap viene ri-hashatta — allocando nuova memoria e liberando la vecchia. Il puntatore grezzo diventa pendente (dangling), e la successiva chiamata a FetchNextItem() legge da memoria liberata.
CreateIterationSource()
→ FontFeatureValuesMapIterationSource(map, aliases_)
→ aliases_ = puntatore grezzo alla HashMap interna
→ iterator_ = aliases_->begin()
FetchNextItem()
→ legge iterator_->key (attraverso aliases_)
Se map.set() / map.delete() viene chiamato tra le iterazioni:
→ la HashMap viene ri-hashatta (nuova allocazione, vecchia liberata)
→ aliases_ → puntatore pendente
→ iterator_ → invalidato
→ Successiva FetchNextItem() → USE-AFTER-FREE
- const FontFeatureAliases* aliases_; // puntatore grezzo → pendente dopo il rehash
+ const FontFeatureAliases aliases_; // copia profonda → immune al rehash
Il fix sostituisce il puntatore grezzo con una copia profonda della HashMap. Anche se la mappa originale viene ri-hashatta, l'iteratore opera sulla propria copia, prevenendo il puntatore pendente.
poc.html in una versione vulnerabile di Chrome (< 145.0.7632.75)| Versione di Chrome | Comportamento Atteso |
|---|---|
| < 145.0.7632.75 (non patchata) | Crash del Renderer — STATUS_ACCESS_VIOLATION (Windows) o SIGSEGV (Linux/macOS). Chrome mostra l'errore "Impossibile aprire questa pagina". |
| >= 145.0.7632.75 (patchata) | Nessun crash — il PoC viene eseguito fino al completamento, tutte le voci vengono lette normalmente. |
Quando aperto in una versione vulnerabile di Chrome, il processo del renderer va in crash con STATUS_ACCESS_VIOLATION:
Impossibile aprire questa pagina
Codice errore: STATUS_ACCESS_VIOLATION
Questo conferma che la UAF è stata innescata — il puntatore pendente accede a memoria liberata/non mappata, causando la terminazione del processo del renderer.
Il PoC innesca la UAF attraverso tre metodi indipendenti:
entries() + Ciclo di Mutazioneconst iterator = map.entries();
while (step < 20) {
iterator.next(); // lettura attraverso il puntatore (ora pendente)
map.delete(key); // innesca il rehash
for (i = 0; i < 512; i++)
map.set("spray_" + i, [i]); // forza la riallocazione
}
for...of + Mutazione Concorrentefor (const [k, v] of map) {
map.delete(k);
for (i = 0; i < 512; i++)
map.set("alt_" + i, [i]);
}
requestAnimationFrame + Ricalcolo del Layoutfunction rafTrigger() {
document.body.offsetWidth; // forza il ricalcolo del layout
const result = iterator.next();
map.delete(k);
for (i = 0; i < 512; i++)
map.set("raf_" + i, [i]);
requestAnimationFrame(rafTrigger);
}
Ogni metodo include anche heap grooming — allocando 50 regole @font-feature-values della stessa dimensione per rendere il layout dell'heap prevedibile per un potenziale sfruttamento.
document.cookie, localStorage, sessionStorage, valori di input dei modulifetch() / WebSocket / sendBeacon()addEventListener('keydown')Quando combinata con una vulnerabilità separata di sandbox escape:
RCE nel Renderer (CVE-2026-2441)
→ Exploit Mojo IPC → RCE nel processo Browser
→ Exploit del kernel → Compromissione totale del sistema
→ Installazione di malware / ransomware / spyware
→ Accesso al file system, movimento laterale, persistenza
Catene di exploit reali che utilizzano UAF simili nei browser:
Questa vulnerabilità è sfruttabile tramite drive-by download — nessuna interazione con l'utente oltre alla visita di una pagina dannosa è richiesta:
chrome://flags/#site-isolation-trial-opt-out)| Data | Evento |
|---|---|
| 2026-02-11 | Vulnerabilità segnalata da Shaheen Fazim |
| 2026-02-13 | Google rilascia Chrome 145.0.7632.75/76 (Windows/macOS), 144.0.7559.75 (Linux) |
| 2026-02-13 | Google riconosce lo sfruttamento in-the-wild |
| 2026-02-16 | Vivaldi e Opera pubblicano i fix |
Se trovi utile questa ricerca, considera di offrirmi un caffè:
Questo proof of concept è fornito esclusivamente per scopi educativi e di ricerca sulla sicurezza autorizzata. L'uso di questo PoC contro sistemi senza esplicita autorizzazione è illegale e non etico. L'autore non è responsabile per qualsiasi uso improprio.
MIT