In den Korrektur-Updates 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 es, Daten in einen Speicherbereich außerhalb der für isolierten WebAssembly-Code zulässigen Grenzen zu schreiben, was potenziell von Angreifern genutzt werden könnte, um eigenen Code außerhalb der isolierten Umgebung von WASI auszuführen.
Wasmtime ist eine Laufzeitumgebung für die Ausführung von WebAssembly-Anwendungen mit WASI-Erweiterungen (WebAssembly System Interface) als herkömmliche isolierte Anwendungen. Das Toolkit ist in Rust geschrieben, und die Schwachstelle wurde durch einen logischen Fehler bei der Festlegung der Regeln für die lineare Adressierung im Cranelift-Codegenerator verursacht, der eine hardwareunabhängige Zwischenrepräsentation in ausführlichen Maschinencode für die Architektur x86_64 übersetzt.
Für WebAssembly-Anwendungen wurden 35-Bit effektive Adressen berechnet, anstelle der in WebAssembly zulässigen 33-Bit-Adressen. Dies verschob die Grenze für zulässige Lese- und Schreiboperationen im virtuellen Speicher auf 34 GB, während die Sandbox-Einstellungen 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 aus WebAssembly-Anwendungen verfügbar. In diesem Speicher können andere WebAssembly-Umgebungen oder Komponenten der WebAssembly-Laufzeit untergebracht werden.
Wenn die Aktualisierung der Version von Wasmtime nicht möglich ist, wird als Workaround empfohlen, die Option „Config::static_memory_maximum_size(0)“ zu verwenden, um eine strikte Überprüfung der Grenzen beim Zugriff auf den linearen Speicher zu aktivieren (was zu einem erheblichen Rückgang der Leistung führen kann). Eine weitere Möglichkeit besteht darin, die Einstellung „Config::static_memory_guard_size(1 < 36)“ zu nutzen, um die Anzahl der Guard Pages im problematischen Bereich des virtuellen Speichers zu erhöhen (beim Zugriff wird eine Ausnahme ausgelöst), was jedoch eine erhebliche Menge an virtuellem Speicher reserviert und die Anzahl der gleichzeitig ausgeführten WebAssembly-Anwendungen einschränkt.
Quelle: opennet.ru
