Ein Remote-Spectre-Angriff konnte erfolgreich ein JWT aus einem gemeinsam ausgeführten Cloudflare Worker auslesen und zeigte damit, wie CPU-Seitenkanäle in gemeinsam genutzten serverlosen Umgebungen über Mandantengrenzen hinweg reichen können.
Die Forscher extrahierten das absichtlich platzierte Token in der Produktionsumgebung von Cloudflare mit bis zu 12 Bit pro Sekunde. Das Forschungsteam kontrollierte beide Worker und platzierte das Token absichtlich im Opfer-Worker. Cloudflare erklärte, es gebe keine Anzeichen dafür, dass die Technik aktiv ausgenutzt worden sei, und habe den demonstrierten Angriff entschärft.
Der Angriff ist bemerkenswert, weil er weder die Ausführung nativen Codes noch einen V8-Software-Exploit oder einen herkömmlichen Sandbox-Ausbruch erforderte. Stattdessen nutzte er aus, dass gemeinsam ausgeführte Worker einen Betriebssystemprozess gemeinsam nutzen können.
So konnte der Remote-Spectre-Angriff ein JWT auslesen
Die Plattform Cloudflare Workers nutzt V8-Isolates, um Code vieler Mandanten innerhalb desselben Betriebssystemprozesses auszuführen. Jeder Worker erhält seinen eigenen JavaScript-Heap. Dadurch kann Cloudflare die Startzeiten kurz halten und zugleich den Aufwand vermeiden, jeden Mandanten in einen eigenen Prozess zu stecken. Cloudflare räumte ein, dass ein beliebiger Lesezugriff innerhalb eines gemeinsam genutzten Worker-Prozesses weiterhin einen Weg für mandantenübergreifendes Auslesen.
Spectre nutzt die spekulative Ausführung moderner CPUs aus. Zwar verwirft der Prozessor das Ergebnis einer fehlerhaften spekulativen Operation, doch können Spuren davon im Cache zurückbleiben. Ein Angreifer kann diese Spuren messen, um Daten abzuleiten, die ansonsten nicht zugänglich sein sollten.
Cloudflare hatte hochauflösende lokale Timer, gemeinsam genutzten Speicher und Multithreading innerhalb von Workern bereits eingeschränkt. Die Forscher umgingen dieses Hindernis, indem sie WebSocket-Kommunikation als entfernte Zeitquelle nutzten.
GIGAZINE berichtete, dass der Angriff außerdem eine Pseudo-Least-Recently-Used-Technik nutzte, um winzige Unterschiede bei Cache-Zeitmessungen zu verstärken, bis sie über eine verrauschte Netzwerkverbindung unterschieden werden konnten. Durable Objects halfen dabei, ein Worker-Isolate fünf bis mehr als 20 Stunden am Leben zu halten, während Messungen gesammelt wurden.
Die Forscher stellten schließlich das absichtlich platzierte JWT Bit für Bit mit bis zu 12 Bit pro Sekunde und einer Genauigkeit von 99,16 % wieder her. The Hacker News berichtete, dass die Rate etwa 360-mal höher lag als bei einer Demonstration aus dem Jahr 2021, bei der ungefähr 120 Bit pro Stunde erreicht wurden.
Warum Cloudflares Spectre-Erkennung den Angriff nicht erkannte
Cloudflares System zur dynamischen Prozessisolierung, bekannt als DyPrIs, überwacht Hardware-Leistungszähler und verschiebt Skripte, die Spectre-Angriffen ähneln, in separate Prozesse.
Zwei Merkmale des neuen Angriffs umgingen diese Abwehr.
Erstens wartete DyPrIs bisher, bis eine Ausführung abgeschlossen war, bevor es sie isolierte. Keep-Alive-Nachrichten über WebSockets ermöglichten, dass eine Ausführung eines Durable Object stundenlang fortgesetzt wurde. So hatten die Forscher Zeit, das Auslesen abzuschließen, bevor die Isolation einsetzte.
Zweitens verstärkte intensiver WebSocket-Datenverkehr die iTLB-Aktivität. Dadurch sank das normalisierte Signal für Fehlvorhersagen bei Verzweigungen, das DyPrIs verwendet, unter seinen Erkennungsschwellenwert. Der Angriff wirkte dadurch wie ein normaler, I/O-intensiver Worker.
Cloudflare verstärkt die Isolation rund um Worker
Cloudflare beschrieb drei sich überschneidende Schutzmaßnahmen: die Verbesserung von DyPrIs, die Integration der V8 Sandbox und den Einsatz hardwaregestützter Isolation innerhalb von Prozessen.
Die V8 Sandbox verringert die Angriffsfläche für rohe 64-Bit-Zeiger und erschwert dadurch die Wiederverwendung des in der Forschung eingesetzten spezifischen spekulativen Gadgets. Cloudflare warnte, dass die Sandbox keine vollständige Spectre-Abwehr darstellt, da andere Gadgets oder Angriffsvarianten weiterhin möglich sein könnten.
Cloudflare setzt außerdem Memory Protection Keys ein, um Worker-Heaps hinter hardwaregestützten Speichergrenzen zu platzieren. Der Zugriff auf Speicher, der durch den falschen Schlüssel geschützt ist, wird von der CPU verweigert. Dadurch wird das direkte Lesen über Isolate hinweg verhindert, das die Forscher demonstriert hatten. MPK verkleinert die verfügbare Leckagefläche, doch Cloudflare erklärte, dass das Spectre-Risiko dadurch nicht vollständig beseitigt werde.
DyPrIs behandelt lang laufende und I/O-intensive Workloads nun als Sicherheitsfälle, und Cloudflare untersucht, ob wiederholte netzwerkbasierte Aktivitäten, die Timern ähneln, ebenfalls dabei helfen können, Seitenkanalangriffe zu erkennen.
Für Sicherheitsteams, die serverlose Dienste bewerten, ist die Untersuchung eine Erinnerung daran, über die Frage hinauszublicken, ob Workloads technisch in einer Sandbox ausgeführt werden. In Umgebungen mit mehreren Mandanten spielen Prozessgrenzen, hardwaregestützte Speicherisolierung, Laufzeitüberwachung und Abwehrmaßnahmen gegen Seitenkanäle allesamt eine Rolle dabei, den Code eines Mandanten von den Daten eines anderen fernzuhalten.
Mehr lesen: Für Sicherheitsteams, die neu offengelegte und aktiv ausgenutzte Schwachstellen verfolgen, brachte auch der August-Patchday von Microsoft Fixes für mehr als 400 Schwachstellen, darunter eine bereits angegriffene Windows-Zero-Day-Lücke.





