V8-Sandbox von Google Chrome nicht mehr experimentell
Die Sandbox der JavaScript-Engine V8 reift heran. Sie soll Speicherfehler unterbinden, bei denen andere Maßnahmen versagen.
![Logo der JavaScript-Engine V8 vor einem Farbverlauf.](https://heise.cloudimg.io/width/610/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/4/5/6/8/4/3/6/V8-5802097ad01e5f7e.png)
(Bild: V8-Projekt, CC BY 3.0 DEED)
Die Sandbox-Implementierung in Googles JavaScript-Engine V8 sei reif genug, um nicht länger als experimentelles Feature zu gelten. Das schreiben die V8-Entwickler in ihrem Blog und weisen darauf hin, dass die Sandbox nun auch Teil von Chromes "Vulnerability Reward Program" ist. Sicherheitsforscher, die Lücken in der Sandbox entdecken, können nun also von Google dafür finanziell belohnt werden.
Die V8-Sandbox ist in 64-Bit-Versionen von Chrome für die üblichen Betriebssysteme schon seit Version 103 des Browser aktiv, also seit knapp zwei Jahren. Sie wurde bislang aber als experimenteller Schutzmechanismus angesehen, in dem noch Lücken zu erwarten waren. Durch die Aufnahme ins Vulnerability Reward Program wird die Funktion geadelt und die aktuelle Chrome-Version 123 dadurch quasi zu einem Beta-Release für die V8-Sandbox, erklären die Entwickler.
Keine Pointer bitte
Die Sandbox umfasst den "Heap" genannten Speicherbereich der V8-Engine und funktioniert, grob gesagt, indem sie keine normalen Zeiger erlaubt: Objekte in der Sandbox können nicht direkt auf andere Objekte verweisen. Sie müssen entweder einen "komprimierten Zeiger" nutzen, der nur ein Offset darstellt und nicht auf Speicher außerhalb der Sandbox verweisen kann, oder einen indirekten Verweis über eine Zeigertabelle verwenden. Die Tabelle enthält auch Typinformationen und kann damit prüfen, ob der Verweis legitim ist.
Die Offset-Berechnungen und insbesondere die Indirektionen beeinträchtigen die Performance, aber nur ein wenig. Die Entwickler geben als typischen Leistungsverlust etwa ein Prozent an, was die erhofften Sicherheitsvorteile der Sandbox wert sind – besonders weil sie mit anderen Maßnahmen kaum zu erreichen sind. Denn bekannte Lücken in der V8-Engine beruhen oft nicht direkt auf klassischen Speicherzugriffsfehlern, sondern beispielsweise auf Logikfehlern im Just-in-Time-Compiler. Erst die führen dann zu Zugriffsfehlern, in aller Regel eben im Heap.
Auch solche, indirekt verursachten Zugriffsfehler kann die Sandbox abfangen, während andere übliche Maßnahmen in diesen Fällen nicht greifen. Beispielsweise nützen die Garantien einer "speichersicheren" (memory safe) Sprache wie Rust nichts bei Logikfehlern im Compiler. In ihrem Blog-Post erklären die Entwickler im Detail, wie die V8-Sandbox funktioniert und wieso auch andere Gegenmaßnahmen wie etwa "Memory Tagging" im speziellen Fall einer JavaScript-Engine nicht gut funktionieren.
Allerdings verbleiben auch in der Sandbox aktuelle noch einige Probleme und Belohnungen für Sicherheitslücken sind an spezielle Bedingungen geknüpft. Die bislang entdeckten Lücken in der Sandbox sind aber deutlich konventionellere Zugriffsfehler, die auch andere Schutzmaßnahmen aufdecken können. Letztlich sollen Ausbrüche aus der Sandbox daher leichter zu verhindern sein, als Ausbrüche aus der V8-Engine an sich. Das ist zumindest die Hoffnung der Entwickler. (syt)