Eine Schwachstelle im Linux Netfilter-Kernel-Subsystem

In Netfilter, dem Kernel-Subsystem von Linux, das zur Filterung und Modifikation von Netzwerkpaketen verwendet wird, wurde eine Schwachstelle (CVE-2021-22555) entdeckt, die es einem lokalen Benutzer ermöglicht, Root-Rechte im System zu erlangen, selbst in einem isolierten Container. Ein funktionsfähiger Prototyp eines Exploits wurde entwickelt, der die Schutzmechanismen von KASLR, SMAP und SMEP umgeht. Der Forscher, der die Schwachstelle entdeckte, erhielt von Google eine Belohnung in Höhe von 20.000 US-Dollar für die Entdeckung einer Methode zur Umgehung der Isolation von Kubernetes-Containern im kCTF-Cluster.

Das Problem besteht seit dem Kernel 2.6.19, der vor 15 Jahren veröffentlicht wurde, und wird durch einen Fehler in den Handlers IPT_SO_SET_REPLACE und IP6T_SO_SET_REPLACE verursacht, was zu einem Pufferüberlauf führt, wenn speziell gestaltete Parameter über den Aufruf von setsockopt im Kompatibilitätsmodus gesendet werden. Unter normalen Bedingungen kann der Aufruf von compat_setsockopt() nur vom Benutzer root ausgeführt werden, aber die für den Angriff erforderlichen Berechtigungen können auch von nicht privilegierten Benutzern in Systemen mit aktivierter Unterstützung für Benutzer-ID-Namensräume (user namespaces) erlangt werden.

Ein Benutzer kann einen Container mit einem separaten root-Benutzer erstellen und darin die Schwachstelle ausnutzen. Beispielsweise sind „user namespaces“ standardmäßig in Ubuntu und Fedora aktiviert, aber nicht in Debian und RHEL. Der Patch zur Behebung der Schwachstelle wurde am 13. April in den Linux-Kernel aufgenommen. Paketaktualisierungen wurden bereits von den Projekten Debian, Arch Linux und Fedora erstellt. In Ubuntu, RHEL und SUSE sind die Updates in der Vorbereitung.

Das Problem tritt in der Funktion xt_compat_target_from_user() aufgrund einer fehlerhaften Berechnung der Speichermenge auf, die beim Speichern von Kernelstrukturen nach der Umwandlung von 32-Bit- in 64-Bit-Darstellungen verwendet wird. Der Fehler erlaubt es, vier Nullbytes an jede Position außerhalb des zugewiesenen Puffers zu schreiben, begrenzt durch den Offset 0x4C. Diese Möglichkeit war ausreichend, um einen Exploit zu erstellen, der zu Root-Rechten führte – durch das Löschen des Zeigers m_list->next in der Struktur msg_msg entstanden Bedingungen, die auf Daten nach der Freigabe des Speichers (use-after-free) zugreift, was dann zur Erfassung von Adressinformationen und zur Modifikation anderer Strukturen durch Manipulation mit dem Systemaufruf msgsnd() verwendet wurde.

Quelle: opennet.ru

60GB SSD 8Gb DDR4