21. Mai 2021
Im Folgenden finden Sie ein Fastly Security Advisory (FSecA, Fastly Sicherheits- und Warnhinweise), in dem eine Untersuchung von CVE-2021-32629 beschrieben wird. Dabei handelt es sich um einen Fehler in 0.73.0 des Cranelift x64-Backends, das zur Erstellung von WebAssembly Modulen verwendet wird, darunter auch die Module, die von Fastly Kunden auf Compute@Edge verwendet werden. Dieser Fehler wurde durch eine kürzliche Veröffentlichung der Bytecode Alliance[1] aufgedeckt.
In diesem FSecA erklären wir, dass wir den Gültigkeitsbereich und die Auswirkungen dieser Untersuchung genau verstehen, und beschreiben die umgesetzten Abhilfemaßnahmen.
Diese Sicherheits- und Warnhinweise gelten für Kunden, die Compute@Edge verwenden und deren Module zwischen dem 8. März und 22. April 2021 hochgeladen wurden. Außerhalb dieses Zeitrahmens hochgeladene Module sind davon nicht betroffen.
Der im Cranelift x64-Backend identifizierte Fehler führt eine Vorzeichenerweiterung anstelle einer Nullerweiterung für einen vom Stack geladenen Wert durch, wenn der Register-Allokator einen ganzzahligen Wert-Spill mit weniger als 64 Bit neu lädt. Dies wirkt sich negativ auf eine andere Optimierung aus: Der Befehlsselektor lässt einen Zero-Extend-Operator mit 32 bis 64 Bit aus, wenn wir aber doch wissen, dass ein Befehl, der einen 32-Bit-Wert erzeugt, die oberen 32 Bit des Zielregisters tatsächlich auf Null setzt. Daher verlässt sich der x64-Compiler auf diese auf Null gesetzten Bits, aber der Wertetyp ist immer noch i32 und der Spill/Reload stellt diese Bits als Vorzeichenerweiterung des MSB von i32 wieder her.
Der Fehler tritt also auf, wenn:
Unter diesen Umständen besteht die Möglichkeit einer Sandbox-Umgehung, wenn der i32-Wert ein Pointer ist. Der übliche Code, der für Heap-Zugriffe ausgestellt wird, setzt die WebAssembly Heap-Adresse auf Null, fügt sie zu einer 64-Bit-Heap-Basis hinzu und lädt die resultierende Adresse. Wenn die Nullerweiterung in eine Vorzeichenerweiterung umgewandelt wird, läuft das Programm möglicherweise rückwärts und greift auf Speicher bis zu 2 GiB vor Beginn des Heap zu.
Dies hat zur Folge, dass die Ausführung eines böswilligen Moduls höchstwahrscheinlich in einem Absturz resultieren würde (aufgrund einer Behauptung einer ungültigen LUCET_MAGIC), wenn der vorherige Instanz-Slot nicht ausgeführt wurde, oder der Prozess aufgrund einer Out-of-Bounds-Beschränkung komplett in sich zusammenbräche. Fastly hat herausgefunden, dass ein speziell entwickeltes WebAssembly Modul die anfällige Version des Cranelift Compilers im Erstellungsprozess auf Compute@Edge möglicherweise angreift. Wenn das geschieht, greift das WebAssembly Modul möglicherweise auf einen Speicher in einer anderen Sandbox zu oder behindert den Kontrollfluss im Compute@Edge Daemon.
Diese Anfälligkeit wurde bei einer routinemäßigen Überwachung von ungewöhnlichem Verhalten von WebAssembly Modulen auf Compute@Edge entdeckt und im Rahmen einer Analyse eines Moduls identifiziert, das vom Sicherheitswissenschaftler Javier Cabrera Arteaga vom KTH Royal Institute of Technology hochgeladen wurde. Im Zuge der Untersuchung dieses ungewöhnlichen Verhaltens bestätigten Fastly Entwickler den Fehler. Es wurde darüber hinaus erkannt, dass er absichtlich eingesetzt werden könne. Fastly hat daraufhin in Zusammenarbeit mit der Bytecode Alliance einen Offenlegungsprozess eingeleitet.
Wir haben WebAssembly Module auf Compute@Edge überprüft und konnten bestätigen, dass keine der WebAssembly Module auf Compute@Edge dieses Fehlverhalten instrumentalisieren.
Es sind keine weiteren Maßnahmen von Compute@Edge Kunden erforderlich; das Problem wurde mit den folgenden Hinweisen vollständig behoben:
Dieser Fehler wurde von Fastly Entwicklern infolge eines gemeinschaftlichen Berichts von Javier Cabrera Arteaga, KTH Royal Institute of Technology, und des Projekts Trustful von Stiftelsen för Strategisk Forskning identifiziert.
Referenzen
[1] https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-hpqh-2wqx-7qp5
Sollten Sie weitere Fragen haben, wenden Sie sich bitte an Fastly Customer Engineering unter support@fastly.com oder an das Fastly Sicherheitsteam unter security@fastly.com