
Proof-of-Concept für CVE-2026-2441, eine Chrome-CSS-Use-after-Free-Schwachstelle, die zu RCE im sandboxed Renderer führt. Enthält drei Trigger-Methoden, Heap-Grooming und eine detaillierte Analyse.
CVSS 8.8 (Hoch) | Aktiv in freier Wildbahn ausgenutzt | Renderer-RCE (Sandboxed)
Eine Use-After-Free-Schwachstelle in der Blink-CSS-Engine von Google Chrome, die es einem entfernten Angreifer ermöglicht, über eine präparierte HTML-Seite beliebigen Code innerhalb der Browser-Sandbox auszuführen.
| Feld | Wert |
|---|
| CVE | CVE-2026-2441 |
| CVSS | 8.8 (Hoch) |
| Typ | Use-After-Free (CWE-416) |
| Komponente | Blink CSS — CSSFontFeatureValuesMap |
| Quelldatei | third_party/blink/renderer/core/css/css_font_feature_values_map.cc |
| Fix-Commit | 63f3cb4864c64c677cd60c76c8cb49d37d08319c |
| Melder | Shaheen Fazim (2026-02-11) |
| Patch-Datum | 2026-02-13 |
| In freier Wildbahn | Ja — Google bestätigte aktive Ausnutzung |
| Plattform | Verwundbar | Behoben |
|---|---|---|
| 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 |
| Chromium-basierte Browser (Edge, Brave, Opera, Vivaldi) | Herstellerhinweis prüfen | Unterschiedlich |
FontFeatureValuesMapIterationSource speicherte einen rohen Zeiger (const FontFeatureAliases* aliases_) auf die interne FontFeatureAliases-HashMap. Wenn die Map während der Iteration über set() oder delete() mutiert wird, führt die HashMap ein Rehashing durch — neuer Speicher wird allokiert und der alte freigegeben. Der rohe Zeiger wird zu einem hängenden Zeiger, und der nächste FetchNextItem()-Aufruf liest aus freigegebenem Speicher.
CreateIterationSource()
→ FontFeatureValuesMapIterationSource(map, aliases_)
→ aliases_ = roher Zeiger auf interne HashMap
→ iterator_ = aliases_->begin()
FetchNextItem()
→ liest iterator_->key (über aliases_)
Wenn map.set() / map.delete() zwischen Iterationen aufgerufen wird:
→ HashMap führt Rehashing durch (neue Allokation, alte freigegeben)
→ aliases_ → hängender Zeiger
→ iterator_ → ungültig
→ Nächster FetchNextItem() → USE-AFTER-FREE
- const FontFeatureAliases* aliases_; // roher Zeiger → hängend nach Rehashing
+ const FontFeatureAliases aliases_; // tiefe Kopie → immun gegen Rehashing
Der Fix ersetzt den rohen Zeiger durch eine tiefe Kopie der HashMap. Selbst wenn die ursprüngliche Map ein Rehashing durchführt, arbeitet der Iterator auf seiner eigenen Kopie, wodurch der hängende Zeiger verhindert wird.
poc.html in einer verwundbaren Chrome-Version (< 145.0.7632.75)| Chrome-Version | Erwartetes Verhalten |
|---|---|
| < 145.0.7632.75 (ungepatcht) | Renderer-Absturz — STATUS_ACCESS_VIOLATION (Windows) oder SIGSEGV (Linux/macOS). Chrome zeigt die Fehlermeldung „Can't open this page" an. |
| >= 145.0.7632.75 (gepatcht) | Kein Absturz — PoC läuft vollständig durch, alle Einträge werden normal gelesen. |
Beim Öffnen in einer verwundbaren Chrome-Version stürzt der Renderer-Prozess mit STATUS_ACCESS_VIOLATION ab:
Can't open this page
Error code: STATUS_ACCESS_VIOLATION
Dies bestätigt, dass die UAF ausgelöst wird — der hängende Zeiger greift auf freigegebenen/nicht zugeordneten Speicher zu, wodurch der Renderer-Prozess beendet wird.
Der PoC löst die UAF über drei unabhängige Methoden aus:
entries()-Iterator + Mutationsschleifeconst iterator = map.entries();
while (step < 20) {
iterator.next(); // Lesen über (inzwischen hängenden) Zeiger
map.delete(key); // Rehashing auslösen
for (i = 0; i < 512; i++)
map.set("spray_" + i, [i]); // Reallokation erzwingen
}
for...of + gleichzeitige Mutationfor (const [k, v] of map) {
map.delete(k);
for (i = 0; i < 512; i++)
map.set("alt_" + i, [i]);
}
requestAnimationFrame + Layout-Neuberechnungfunction rafTrigger() {
document.body.offsetWidth; // Layout-Neuberechnung erzwingen
const result = iterator.next();
map.delete(k);
for (i = 0; i < 512; i++)
map.set("raf_" + i, [i]);
requestAnimationFrame(rafTrigger);
}
Jede Methode enthält außerdem Heap-Grooming — die Allokation von 50 gleich großen @font-feature-values-Regeln, um das Heap-Layout für eine mögliche Ausnutzung vorhersehbar zu machen.
document.cookie, localStorage, sessionStorage, Formulareingabewerte lesenfetch() / WebSocket / sendBeacon() exfiltrierenaddEventListener('keydown') erfassenIn Kombination mit einer separaten Sandbox-Escape-Schwachstelle:
Renderer-RCE (CVE-2026-2441)
→ Mojo-IPC-Exploit → Browser-Prozess-RCE
→ Kernel-Exploit → Vollständige Systemkompromittierung
→ Malware / Ransomware / Spyware-Installation
→ Dateisystemzugriff, laterale Bewegung, Persistenz
Reale Exploit-Ketten mit ähnlichen Browser-UAFs:
Diese Schwachstelle ist über Drive-by-Download ausnutzbar — keine Benutzerinteraktion über den Besuch einer bösartigen Seite hinaus erforderlich:
chrome://flags/#site-isolation-trial-opt-out)| Datum | Ereignis |
|---|---|
| 2026-02-11 | Schwachstelle von Shaheen Fazim gemeldet |
| 2026-02-13 | Google veröffentlicht Chrome 145.0.7632.75/76 (Windows/macOS), 144.0.7559.75 (Linux) |
| 2026-02-13 | Google bestätigt Ausnutzung in freier Wildbahn |
| 2026-02-16 | Vivaldi und Opera liefern Fixes aus |
Wenn Sie diese Forschung nützlich finden, erwägen Sie, mir einen Kaffee zu spendieren:
Dieses Proof of Concept wird ausschließlich für Bildungs- und autorisierte Sicherheitsforschungszwecke bereitgestellt. Die Verwendung dieses PoC gegen Systeme ohne ausdrückliche Genehmigung ist illegal und unethisch. Der Autor ist nicht für jeglichen Missbrauch verantwortlich.
MIT