
POC bald verfügbar
Eine kritische Sicherheitslücke zur Codeausführung aus der Ferne in Google Chrome (Versionen 123 und früher), die die Behandlung von Garbage-Collection-Typen in WebAssembly (WASM) betrifft. Der Fehler ermöglicht eine Typverwechslung, die zu beliebigen Speicher-Lese-/Schreibzugriffen und letztlich zur Codeausführung eskaliert werden kann.
Die Sicherheitslücke beruht auf einer Verwechslung zwischen den isorekursiven kanonischen Typ-IDs von WASM und den Darstellungen wasm::HeapType / wasm::ValueType, die in den JavaScript-zu-WASM-Konvertierungsfunktionen verwendet werden.
Entscheidend ist, dass eine kanonische Typ-ID in keiner Weise an kV8MaxWasmTypes gebunden ist – sie kann so groß werden, wie der Host-Speicher es zulässt.
Die Klasse ValueType kodiert Heap-Typen in einem 20-Bit-Feld, aber kanonische Typ-IDs können dieses Limit überschreiten. Wenn eine kanonische Typ-ID wie:
tn = t0 + 0x100000 * n
auf 20 Bits abgeschnitten wird, aliast sie mit t0, was einen Typverwechslungsangriff ermöglicht.
Zusätzlich umgehen kanonische Typ-IDs, die mit kAny + 0x100000 * n übereinstimmen (wobei kAny = 1000005), Typüberprüfungen und erlauben beliebige WASM-Typverwechslung.
Das Advisory beschreibt die Ausnutzung in drei Phasen:
Das Erstellen von WASM-Modulen mit 1.000.000+ Typen führt dazu, dass kanonische Typ-IDs überlaufen, was eine Verwechslung zwischen Strukturtypen und Referenztypen ermöglicht. Strukturtypen, die so gestaltet sind, dass sie mit kAny aliasten, umgehen die JS-zu-WASM-Typüberprüfungen.
Durch das Modifizieren von ArrayBuffer-Backing-Store-Feldern erlangt der Angreifer einen beliebigen Adress-Schreibzugriff, wobei der geschriebene Wert die Metadatenadresse ist. Dies nutzt SlotSpanMetadata-Strukturen aus, um chrome.dll-Adressen preiszugeben und beliebige Speicherschreibvorgänge zu erreichen.
Der Exploit kapert die CodePointerTable und verlagert die Ausführung auf eine ROP-Kette, die Shellcode-Bereiche als ausführbar markiert.
Das PoC demonstriert:
kAny aliasten, um die JS-zu-WASM-Typüberprüfungen zu umgehen.Dies ist eine Variante von CVE-2024-2887, entdeckt von Manfred Paul und vorgestellt auf dem Pwn2Own Vancouver 2024. Sie nutzt eine ähnliche Schwäche bei der Typkanonisierung über einen anderen Vektor aus.
Google Chrome 123 und früher.
Behoben in Google Chrome 124.
Seunghyun Lee (Xion, @0x10n), Teilnehmer am TyphoonPWN 2024.