Sicherheitslücke im Linux-Netfilter-Kernel-Subsystem

In Netfilter, einem Subsystem des Linux-Kernels, das zum Filtern und Ändern von Netzwerkpaketen verwendet wird, wurde eine Schwachstelle (CVE-2021-22555) identifiziert, die es einem lokalen Benutzer ermöglicht, Root-Rechte auf dem System zu erlangen, auch wenn er sich in einem isolierten Container befindet. Ein funktionierender Prototyp eines Exploits, der die Schutzmechanismen KASLR, SMAP und SMEP umgeht, wurde zum Testen vorbereitet. Der Forscher, der die Schwachstelle entdeckte, erhielt von Google eine Belohnung von 20 US-Dollar für die Identifizierung einer Methode zur Umgehung der Isolation von Kubernetes-Containern in einem kCTF-Cluster.

Das Problem besteht seit Kernel 2.6.19, der vor 15 Jahren veröffentlicht wurde, und wird durch einen Fehler in den Handlern IPT_SO_SET_REPLACE und IP6T_SO_SET_REPLACE verursacht, der einen Pufferüberlauf verursacht, wenn speziell formatierte Parameter über einen Setsockopt-Aufruf im Kompatibilitätsmodus gesendet werden. Unter normalen Umständen kann nur der Root-Benutzer compat_setsockopt() aufrufen, die für die Durchführung des Angriffs erforderlichen Berechtigungen können jedoch auch von einem nicht privilegierten Benutzer auf Systemen mit aktivierter Unterstützung für Benutzernamensräume erlangt werden.

Ein Benutzer kann einen Container mit einem separaten Root-Benutzer erstellen und von dort aus die Schwachstelle ausnutzen. „Benutzernamensräume“ sind beispielsweise unter Ubuntu und Fedora standardmäßig aktiviert, unter Debian und RHEL jedoch nicht. Der Patch, der die Schwachstelle behebt, wurde am 13. April in den Linux-Kernel übernommen. Paketaktualisierungen wurden bereits von den Projekten Debian, Arch Linux und Fedora generiert. Bei Ubuntu, RHEL und SUSE sind Updates in Vorbereitung.

Das Problem tritt in der Funktion xt_compat_target_from_user() aufgrund einer falschen Berechnung der Speichergröße beim Speichern von Kernelstrukturen nach der Konvertierung von 32-Bit- auf 64-Bit-Darstellung auf. Der Fehler ermöglicht das Schreiben von vier Nullbytes an eine beliebige Position außerhalb des zugewiesenen Puffers, der durch den Offset 0x4C begrenzt ist. Es stellte sich heraus, dass diese Funktion ausreichte, um einen Exploit zu erstellen, der es einem ermöglichte, Root-Rechte zu erlangen – durch das Löschen des m_list->next-Zeigers in der msg_msg-Struktur wurden Bedingungen für den Zugriff auf Daten nach der Speicherfreigabe (Use-after-free) geschaffen wurde dann verwendet, um Informationen über Adressen und Änderungen an anderen Strukturen durch Manipulation des Systemaufrufs msgsnd() zu erhalten.

Source: opennet.ru

Kommentar hinzufügen