Im Linux-Kernel wurden zwei Schwachstellen entdeckt, die es ermöglichen, das eBPF-Subsystem auszunutzen, um den Schutz vor Spectre v4 (SSB, Speculative Store Bypass) zu umgehen. Mit einem nicht privilegierten BPF-Programm kann ein Angreifer Bedingungen schaffen, die eine spekulative Ausführung bestimmter Operationen ermöglichen und Inhalte beliebiger Bereiche des Kernel-Speichers identifizieren. Die begleitenden eBPF-Subsysteme im Kernel haben Zugang zu einem Exploit-Prototyp erhalten, der die Möglichkeit praktischer Angriffe demonstriert. Die Probleme wurden in Form von Patches (1, 2) behoben, die im nächsten Kernel-Update enthalten sein werden. Aktualisierungen in den Distributionen sind derzeit noch nicht verfügbar (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).
Die Spectre 4-Angriffsmetode basiert darauf, dass Informationen, die im CPU-Cache gespeichert sind, wiederhergestellt werden, nachdem das Ergebnis der speculativ ausgeführten Operationen verworfen wurde, während abwechselnde Schreib- und Leseoperationen mit indirekter Adressierung verarbeitet werden. Wenn eine Leseoperation auf eine Schreiboperation folgt (zum Beispiel: mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), kann die Offset-Adresse für das Lesen bereits bekannt sein, da ähnliche Operationen ausgeführt wurden (Leseoperationen werden deutlich häufiger ausgeführt, und das Lesen kann aus dem Cache erfolgen). Der Prozessor kann spekulativ das Lesen vor dem Schreiben ausführen, ohne zu warten, bis das Offset der indirekten Adressierung für das Schreiben berechnet wird.
Wenn nach der Berechnung der Verschiebung eine Überlappung der Speicherbereiche für Lese- und Schreiboperationen festgestellt wird, verwirft der Prozessor einfach das bereits spekulativ erhaltene Leseresultat und wiederholt diese Operation. Dieses Merkmal ermöglicht es der Leseanweisung, auf den alten Wert an einer bestimmten Adresse zuzugreifen, während die Speicheroperation noch nicht abgeschlossen ist. Nach dem Verwerfen der fehlgeschlagenen spekulativen Operation verbleiben Spuren ihrer Ausführung im Cache, danach kann eine der Methoden zur Bestimmung des Inhalts des Caches basierend auf der Analyse der Änderungen der Zugriffszeiten auf zwischengespeicherte und nicht zwischengespeicherte Daten angewendet werden.
Die erste Schwachstelle (CVE-2021-35477) resultiert aus einer Unzulänglichkeit im Mechanismus zur Überprüfung von BPF-Programmen. Um sich gegen den Spectre 4-Angriff zu schützen, fügt der Verifikator nach potenziell problematischen Speicheroperationen eine zusätzliche Anweisung hinzu, die einen Nullwert speichert, um die Spuren der vorherigen Operation zu verbergen. Man ging davon aus, dass die Nullschreiboperation sehr schnell ausgeführt wird und die spekulative Ausführung blockiert, da sie nur von dem Zeiger auf den BPF-Stack-Rahmen abhängt. In der Realität stellte sich jedoch heraus, dass Bedingungen geschaffen werden können, unter denen die Anweisung, die zu einer spekulativen Ausführung führt, vor der verdrängenden Speicheroperation ausgeführt wird.
Die zweite Schwachstelle (CVE-2021-3455) bezieht sich auf die Tatsache, dass bei der Erkennung potenziell gefährlicher Speicheroperationen durch den BPF-Verifizierer nicht berücksichtigte, nicht initialisierte Bereiche des BPF-Stacks sind, wobei die erste Schreiboperation nicht geschützt ist. Diese Besonderheit ermöglicht es, spekulative Leseoperationen auszuführen, die von nicht initialisierten Speicherbereichen abhängen, bevor die Speicherinstruction ausgeführt wird. Neuer Speicher für den BPF-Stack wird ohne Überprüfung des bereits vorhandenen Inhalts in dem zugewiesenen Speicher bereitgestellt, und vor dem Start des BPF-Programms gibt es eine Möglichkeit, den Inhalt des Speicherbereichs zu steuern, der später für den BPF-Stack zugewiesen wird.
Quelle: opennet.ru
