Eine Sicherheitsanfälligkeit im eBPF-Subsystem, die die Ausführung von Code auf Kernel-Ebene in Linux ermöglicht.

Im eBPF-Subsystem, das die Ausführung von Handlern innerhalb des Linux-Kernels in einer speziellen JIT-virtuellen Maschine ermöglicht, wurde eine Schwachstelle (CVE-2021-4204) entdeckt, die es einem lokalen nicht privilegierten Benutzer erlaubt, seine Berechtigungen zu erhöhen und eigenen Code auf Kernel-Ebene auszuführen. Das Problem tritt ab Kernel-Version 5.8 auf und ist bisher ungepatcht (betrifft auch Version 5.16). Den Fortschritt bei der Erstellung von Updates zur Behebung des Problems in verschiedenen Distributionen kann man auf den folgenden Seiten verfolgen: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Ein funktionierender Exploit wurde angekündigt, der am 18. Januar veröffentlicht werden soll (Benutzern und Entwicklern wurde eine Woche zur Behebung der Schwachstelle gegeben).

Die Schwachstelle wird durch unzureichende Überprüfung der übergebenen eBPF-Programme verursacht. Das eBPF-Subsystem bietet Hilfsfunktionen, deren korrekte Verwendung durch einen speziellen Verifier überprüft wird. Einige Funktionen erfordern die Übergabe des Wertes PTR_TO_MEM als Argument, und um mögliche Pufferüberläufe zu verhindern, muss der Verifier die Größe des mit dem Argument verknüpften Speichers kennen. Für die Funktionen bpf_ringbuf_submit und bpf_ringbuf_discard wurden die Größenangaben des übergebenen Speichers dem Verifier nicht mitgeteilt, was für die Überschreibung von Speicherbereichen außerhalb des Puffers verwendet werden konnte, wenn speziell gestalteter eBPF-Code ausgeführt wurde.

Um einen Angriff durchzuführen, muss der Benutzer in der Lage sein, sein BPF-Programm hochzuladen, und viele neuere Linux-Distributionen blockieren diese Möglichkeit standardmäßig (auch nicht privilegierter Zugang zu eBPF ist von Version 5.16 an im Kernel selbst standardmäßig verboten). Zum Beispiel kann die Schwachstelle in der Standardkonfiguration von Ubuntu 20.04 LTS ausgenutzt werden, aber in Umgebungen von Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 und Fedora 33 tritt sie nur auf, wenn der Administrator den Parameter kernel.unprivileged_bpf_disabled auf 0 gesetzt hat. Als Workaround zur Blockierung der Schwachstelle kann die Ausführung von BPF-Programmen für nicht privilegierte Benutzer mit dem Befehl „sysctl -w kernel.unprivileged_bpf_disabled=1“ untersagt werden.

Quelle: opennet.ru

60GB SSD 8Gb DDR4