In den Korrektur-Updates von Wasmtime 6.0.1, 5.0.1 und 4.0.1 wurde eine Schwachstelle (CVE-2023-26489) behoben, die als kritisch eingestuft ist. Diese Schwachstelle ermöglicht das Schreiben von Daten in einen Speicherbereich außerhalb der für isolierten WebAssembly-Code zulässigen Grenzen, was von einem Angreifer potenziell zum Ausführen eigenen Codes außerhalb der isolierten WASI-Umgebung genutzt werden kann.
Wasmtime ist eine Runtime für die Ausführung von WebAssembly-Anwendungen mit WASI (WebAssembly System Interface) Erweiterungen, die als gewöhnliche isolierte Anwendungen fungieren. Das Toolkit wurde in Rust geschrieben, und die Schwachstelle wurde durch einen logischen Fehler bei der Festlegung der Regeln zur linearen Adressierung des Speichers im Cranelift-Codegenerator verursacht, der hardwareunabhängige Zwischenrepräsentationen in ausführbaren Maschinencode für die x86_64-Architektur übersetzt.
Insbesondere wurden für WebAssembly-Anwendungen 35-Bit-Adresse berechnet, anstatt der in WebAssembly zulässigen 33-Bit-Adressen, was die Grenze der zulässigen Lese- und Schreiboperationen im virtuellen Speicher auf 34 GB verschob, während die Sandbox-Einstellungen einen Schutz für 6 GB ab der Basisadresse bieten. Infolgedessen war der Bereich des virtuellen Speichers von 6 bis 34 GB ab der Basisadresse für Lese- und Schreibzugriffe von WebAssembly-Anwendungen verfügbar. In diesem Speicher können sich andere WebAssembly-Umgebungen oder Komponenten der WebAssembly-Runtime befinden.
Wenn ein Update der Wasmtime-Version nicht möglich ist, werden als Workarounds zur Blockierung des Fehlers die Angabe der Option „Config::static_memory_maximum_size(0)“ erwähnt, um bei jedem Zugriff auf den linearen Speicher eine zwingende separate Bereichsprüfung durchzuführen (was zu erheblichen Leistungseinbußen führt). Eine andere Möglichkeit besteht darin, die Einstellung „Config::static_memory_guard_size(1 < 36)“ zu verwenden, um die Anzahl der Guard Pages (Wachseiten), die im problematischen Bereich des virtuellen Speichers platziert werden (bei Zugriff wird eine Ausnahme ausgelöst), zu erhöhen (was zur Reservierung eines großen Volumens an virtuellem Speicher und zur Einschränkung der Anzahl gleichzeitig ausgeführter WebAssembly-Anwendungen führt).
Quelle: opennet.ru
