
PoC CVE-2023-28205: Apple WebKit Use-After-Free Sicherheitslücke
Diese Schwachstelle betrifft Apple WebKit und kann durch böswillig gestaltete Webinhalte ausgenutzt werden, was möglicherweise die Ausführung von beliebigem Code im Kontext des WebKit-Prozesses ermöglicht.
Der in diesem Repository analysierte betroffene WebKit-Build basiert auf WebKit-613.1.17.1 (PlayStation / Safari 15.4-Versionen).
Der Proof-of-Concept löst eine Use-After-Free (UAF)-Bedingung aus, indem die Registrierung von JavaScript-Objekten wie Map und Date während strukturierter Klonvorgänge absichtlich verzögert wird.
Dieses Zeitfenster ermöglicht es dem JavaScriptCore Garbage Collector (GC), Objekte zurückzugewinnen, die logisch noch in Gebrauch sind, was dazu führt, dass während der fortgesetzten Ausführung ungültige Zeiger dereferenziert werden.
SerializedScriptValueCloneDeserializer::deserialize()Die Schwachstelle liegt in der Deserialisierungslogik für strukturierte Klone, insbesondere darin, wie neu erstellte JavaScript-Objekte während der rekursiven Deserialisierung verfolgt werden.
In SerializedScriptValue.cpp verwendet der Deserialisierer standardmäßige WebKit-Container wie:
Vector<JSObject*, 32> outputObjectStack;
Vector<JSMap*, 4> mapStack;
Vector<JSSet*, 4> setStack;
Diese Vector-Container werden nicht vom Garbage Collector durchsucht. Wenn während der Deserialisierung ein Garbage-Collection-Zyklus ausgelöst wird (z.B. durch Speicherdruck oder reentrante JS-Ausführung), können Objekte, die nur von diesen Containern referenziert werden, fälschlicherweise eingesammelt werden.
Der Deserialisierer verwendet jedoch weiterhin diese hängenden Zeiger, was zu einer Use-After-Free-Bedingung führt.
Der offizielle WebKit-Sicherheitspatch (Commit c9880de) ersetzt diese Container durch MarkedVector, eine GC-bewusste Struktur, die ihren Inhalt ordnungsgemäß als GC-Wurzeln registriert.
Im analysierten Build:
MarkedVector ist nicht implementiertCloneDeserializer verwendet immer noch VectorDies bestätigt, dass der Build vollständig anfällig für CVE-2023-28205 ist.
Der folgende Absturz wurde zuverlässig durch den PoC ausgelöst und ist mit einer veralteten Zeigerdereferenzierung nach GC konsistent.
SIGSEGV (11)0x0000000000000068SceNKWebProcesslibSceNKWebKit.sprxDie Fehleradresse 0x68 deutet auf eine NULL-Basiszeiger-Dereferenzierung mit einem Objektfeld-Offset hin, eine klassische Signatur für den Zugriff auf ein freigegebenes JavaScript-Objekt.
Der Registerstatus bestätigt:
RAX = 0x0 (NULL object base)Dieses Absturzverhalten ist eine direkte Manifestation der oben beschriebenen CloneDeserializer-UAF.