ClickCease BPF-Code kann lokale Rechteerweiterung ermöglichen (CVE-2021-29154) - TuxCare

Abonnieren Sie unseren beliebten Newsletter

Schließen Sie sich 4.500+ Linux- und Open-Source-Experten an!

2x im Monat. Kein Spam.

BPF-Code kann lokale Privilegienerweiterung ermöglichen (CVE-2021-29154)

12. April 2021. TuxCare PR Team

Another vulnerability targeting the BPF subsystem has been disclosed publicly in the past few days (CVE-2021-29154). It allows users on a system running non-default configuration of the BPF subsystem to run specially crafted code as a BPF filter and run arbitrary executable code in the kernel context.   According to vendors, it affects all distributions running kernels up to version 5.11.12. Distribution vendors are starting to deliver patches through their update mechanisms, and KernelCare is also finalizing patches for it’s rebootless patching process to address this issue.  Because of the nature of the BPF functionality, which is to allow user code to interact with network packet processing within the kernel, there is a very big potential for attack given any weakness in the implementation. This specific functionality has been addressed recently in the specter mitigation code bug discussed here.  To be vulnerable, a system would have to be configured to allow BPF JIT compilation (for example, by setting “net.core.bpf_jit_enable = 1”). This is often the case in situations where regular users are doing work related to sockets’ manipulation or in seccomp (secure computing mode) environments where permissions are granted more granularly than normal.  The actual vulnerable code resides in arch/x86/net/bpf_jit_comp.c and arch/x86/net/bpf_jit_comp32.c in the kernel source code tree. The flaw comes from the way branch displacement happens when the user code is compiled, by making wrong assumptions regarding the address of code during optimization.  Proper exploitation of this vulnerability could even lead to container or chroots’ escape, since the kernel is shared between them, and running code in the kernel context permits it to escape containerization limits.  As a stop-gap procedure, you can quickly disable BPF JIT by running:  # echo 0 > /proc/sys/net/core/bpf_jit_enable   Which will persist until reversed or a system reboot. A more permanent removal can be achieved by using your distribution’s syscfg equivalent utility to set “net.core.bpf_jit_enable=0” at boot time. Of course, this type of solution solves the problem by disabling the functionality, which in itself is self-defeating. If you actually had your system configured to use BPF JIT, in all likelihood your use case needed that setting explicitly enabled, and you should rely instead on proper kernel patching, either through your distribution vendor’s patches or through KernelCare’s rebootless process.&#8221; width=&#8221;2600&#8243; loading=&#8221;lazy&#8221; style=&#8221;width: 2600px;&#8221;></p><p style=Eine weitere Schwachstelle, die auf das BPF-Subsystem abzielt, wurde in den letzten Tagen öffentlich bekannt gemacht (CVE-2021-29154). Sie ermöglicht es Benutzern auf einem System mit einer nicht standardmäßigen Konfiguration des BPF-Subsystems, speziell gestalteten Code als BPF-Filter auszuführen und beliebigen ausführbaren Code im Kernelkontext auszuführen. 

 

Nach Angaben der Hersteller sind alle Distributionen mit Kerneln bis zur Version 5.11.12 betroffen. Die Anbieter von Distributionen beginnen damit, Patches über ihre Update-Mechanismen bereitzustellen, und auch KernelCare arbeitet an Patches für seinen rebootlosen Patching-Prozess, um dieses Problem zu beheben.

Aufgrund der Natur der BPF-Funktionalität, die es dem Benutzercode ermöglicht, mit der Verarbeitung von Netzwerkpaketen innerhalb des Kernels zu interagieren, besteht bei jeder Schwäche in der Implementierung ein sehr großes Angriffspotenzial. Diese spezielle Funktionalität wurde vor kurzem durch den specter mitigation code bug, der hier diskutiert wird.

 

Um verwundbar zu sein, müsste ein System so konfiguriert sein, dass es die JIT-Kompilierung von BPF zulässt (z. B. durch die Einstellung "net.core.bpf_jit_enable = 1"). Dies ist häufig in Situationen der Fall, in denen reguläre Benutzer Arbeiten im Zusammenhang mit der Manipulation von Sockets durchführen oder in Seccomp-Umgebungen (Secure Computing Mode), in denen die Berechtigungen detaillierter als normal erteilt werden.

 

Der eigentliche anfällige Code befindet sich in arch/x86/net/bpf_jit_comp.c und arch/x86/net/bpf_jit_comp32.c im Kernel-Quellcodebaum. Der Fehler entsteht durch die Art und Weise, wie die Verzweigungsverschiebung bei der Kompilierung des Anwendercodes erfolgt, indem während der Optimierung falsche Annahmen bezüglich der Adresse des Codes getroffen werden.

 

Eine korrekte Ausnutzung dieser Schwachstelle könnte sogar zum Ausbruch von Containern oder Chroots führen, da der Kernel von diesen gemeinsam genutzt wird und die Ausführung von Code im Kernelkontext es ermöglicht, die Grenzen der Containerisierung zu umgehen.

 

Als Notlösung können Sie BPF JIT schnell deaktivieren, indem Sie das Programm ausführen:

 

# echo 0 > /proc/sys/net/core/bpf_jit_enable

 

 

die solange bestehen bleibt, bis sie rückgängig gemacht oder das System neu gestartet wird. Eine dauerhaftere Beseitigung kann erreicht werden, indem Sie das entsprechende Dienstprogramm syscfg Ihrer Distribution verwenden, um "net.core.bpf_jit_enable=0" beim Booten zu setzen. Natürlich löst diese Art von Lösung das Problem, indem sie die Funktionalität deaktiviert, was an sich schon selbstzerstörerisch ist. Wenn Sie Ihr System tatsächlich für die Verwendung von BPF JIT konfiguriert hatten, musste diese Einstellung in Ihrem Anwendungsfall höchstwahrscheinlich explizit aktiviert werden, und Sie sollten sich stattdessen auf ein korrektes Kernel-Patching verlassen, entweder durch die Patches Ihres Distributionsanbieters oder durch den rebootlosen Prozess von KernelCare.

Möchten Sie das Patchen von Sicherheitslücken ohne Kernel-Neustart, Systemausfallzeiten oder geplante Wartungsfenster automatisieren?

Erfahren Sie mehr über Live-Patching mit TuxCare

Werden Sie ein TuxCare-Gastautor

Los geht's

E-Mail

Beitreten

4,500

Linux & Open Source
Fachleute!

Abonnieren Sie
unseren Newsletter