Sicherheitslücken im eBPF-Subsystem des Linux-Kernels

Im eBPF-Subsystem wurde eine Schwachstelle (CVE-2021-29154) identifiziert, die es Ihnen ermöglicht, Handler zum Tracing, zur Analyse des Betriebs von Subsystemen und zur Verwaltung des Datenverkehrs auszuführen, die innerhalb des Linux-Kernels in einer speziellen virtuellen Maschine mit JIT ausgeführt werden, was eine lokaler Benutzer, um die Ausführung seines Codes auf Kernel-Ebene zu erreichen. Das Problem tritt bis zur Veröffentlichung von 5.11.12 (einschließlich) auf und wurde in Distributionen (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch) noch nicht behoben. Der Fix ist als Patch verfügbar.

Nach Angaben der Forscher, die die Schwachstelle identifiziert haben, konnten sie einen funktionierenden Prototyp des Exploits für 32- und 64-Bit-x86-Systeme entwickeln, der von einem unprivilegierten Benutzer verwendet werden kann. Red Hat weist jedoch darauf hin, dass die Schwere des Problems davon abhängt, ob der eBPF-Systemaufruf für den Benutzer zugänglich ist. Beispielsweise kann die Schwachstelle auf RHEL und den meisten anderen Linux-Distributionen in der Standardkonfiguration ausgenutzt werden, wenn BPF JIT aktiviert ist und der Benutzer über CAP_SYS_ADMIN-Rechte verfügt. Als Workaround wird empfohlen, BPF JIT mit dem folgenden Befehl zu deaktivieren: echo 0 > /proc/sys/net/core/bpf_jit_enable

Das Problem wird durch einen Fehler bei der Berechnung des Offsets für Verzweigungsanweisungen während des Maschinencode-Generierungsprozesses des JIT-Compilers verursacht. Insbesondere wird bei der Generierung von Verzweigungsanweisungen nicht berücksichtigt, dass sich der Offset nach Durchlaufen der Optimierungsphase ändern kann. Dieser Fehler kann genutzt werden, um anomalen Maschinencode zu generieren und ihn auf Kernel-Ebene auszuführen.

Bemerkenswert ist, dass dies nicht die einzige Schwachstelle im eBPF-Subsystem in letzter Zeit ist. Ende März wurden zwei weitere Schwachstellen im Kernel identifiziert (CVE-2020-27170, CVE-2020-27171), die es ermöglichen, mit eBPF den Schutz vor Schwachstellen der Spectre-Klasse zu umgehen, die es ermöglichen, den Inhalt des Kernel-Speichers zu ermitteln als Ergebnis der Schaffung von Bedingungen für die spekulative Ausführung bestimmter Operationen. Der Spectre-Angriff erfordert das Vorhandensein einer bestimmten Befehlsfolge in privilegiertem Code, die zur spekulativen Ausführung von Anweisungen führt. In eBPF wurden mehrere Möglichkeiten gefunden, solche Anweisungen durch Manipulationen mit zur Ausführung übertragenen BPF-Programmen zu generieren.

Die Sicherheitslücke CVE-2020-27170 wird durch Zeigermanipulation im BPF-Verifizierer verursacht, die dazu führt, dass spekulative Operationen auf einen Bereich außerhalb der Puffergrenzen zugreifen. Die Schwachstelle CVE-2020-27171 beruht auf einem Integer-Unterlauffehler beim Arbeiten mit Zeigern, der zu spekulativem Zugriff auf Daten außerhalb des Puffers führt. Diese Probleme wurden bereits in den Kernel-Releases 5.11.8, 5.10.25, 5.4.107, 4.19.182 und 4.14.227 behoben und sind auch in Kernel-Updates für die meisten Linux-Distributionen enthalten. Forscher haben einen Prototyp eines Exploits vorbereitet, der es einem unprivilegierten Benutzer ermöglicht, Daten aus dem Kernel-Speicher zu extrahieren.

Source: opennet.ru

Kommentar hinzufügen