Kritische Sicherheitslücke in Wasmtime, Laufzeit für WebAssembly-Anwendungen

Mit den Korrekturupdates Wasmtime 6.0.1, 5.0.1 und 4.0.1 wurde die Schwachstelle (CVE-2023-26489) behoben, der die Gefahrenstufe „Kritisch“ zugeordnet wurde. Die Sicherheitslücke ermöglicht das Schreiben von Daten in einen Speicherbereich außerhalb der für isolierten WebAssembly-Code zulässigen Grenzen, was möglicherweise von einem Angreifer verwendet werden könnte, um seinen Code außerhalb der isolierten WASI-Umgebung auszuführen.

Wasmtime ist eine Laufzeit zum Ausführen von WebAssembly-Anwendungen mit WASI-Erweiterungen (WebAssembly System Interface) als reguläre eigenständige Anwendungen. Das Toolkit ist in der Sprache Rust geschrieben und die Sicherheitslücke wird durch einen logischen Fehler bei der Definition linearer Speicheradressierungsregeln im Cranelift-Codegenerator verursacht, der eine von Hardwarearchitekturen unabhängige Zwischendarstellung in ausführbaren Maschinencode für die x86_64-Architektur übersetzt.

Insbesondere für WebAssembly-Anwendungen wurden effektive 35-Bit-Adressen anstelle der in WebAssembly zulässigen 33-Bit-Adressen berechnet, wodurch sich die Grenze des für Lese- und Schreibvorgänge zulässigen virtuellen Speichers auf 34 GB verschob, während die Sandbox-Umgebungseinstellungen Schutz bieten 6 GB von der Basisadresse. Dadurch stand ab der Basisadresse ein virtueller Speicherbereich von 6 bis 34 GB zum Lesen und Schreiben aus WebAssembly-Anwendungen zur Verfügung. Dieser Speicher kann andere WebAssembly-Umgebungen oder WebAssembly-Laufzeitkomponenten hosten.

Wenn es nicht möglich ist, die Wasmtime-Version zu aktualisieren, besteht eine Problemumgehung zum Blockieren des Fehlers darin, die Option „Config::static_memory_maximum_size(0)“ anzugeben, um eine separate Grenzprüfung für alle linearen Speicherzugriffe zu aktivieren (was zu einer erheblichen Leistungseinbuße 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 (eine beim Zugriff ausgelöste Ausnahme) zu erhöhen, die im problematischen virtuellen Speicherbereich platziert werden (was zur Reservierung einer großen Menge an virtuellem Speicher führt). Begrenzung der Anzahl gleichzeitig laufender WebAssembly-Anwendungen).

Source: opennet.ru

Kommentar hinzufügen