In Netfilter, dem Subsystem des Linux-Kernels, 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 wenn er sich in einem isolierten Container befindet. Ein funktionierender Exploit-Prototyp wurde zum Testen vorbereitet, der die Schutzmechanismen KASLR, SMAP und SMEP umgeht. Der Forscher, der die Schwachstelle entdeckt hat, erhielt von Google eine Belohnung in Höhe von 20.000 Dollar für die Entdeckung der Methode zur Umgehung der Containerisolierung in einem Kubernetes-Cluster kCTF.
Das Problem besteht seit dem 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, was zu einem Pufferüberlauf führt, wenn speziell gestaltete Parameter über den setsockopt-Aufruf im Kompatibilitätsmodus gesendet werden. Im Normalfall kann der Aufruf compat_setsockopt() nur vom Root-Benutzer ausgeführt werden, aber die für den Angriff erforderlichen Berechtigungen können auch von einem unprivilegierten Benutzer in Systemen mit aktivierter Unterstützung für Benutzer-Namespaces (user namespaces) erlangt werden.
Benutzer können einen Container mit einem separaten Root-Benutzer erstellen und darin eine Sicherheitsanfälligkeit ausnutzen. Zum Beispiel sind „User Namespaces“ standardmäßig in Ubuntu und Fedora aktiviert, jedoch nicht in Debian und RHEL. Der Patch zur Behebung der Sicherheitsanfälligkeit wurde am 13. April in den Linux-Kernel integriert. Die Paketaktualisierungen wurden bereits von den Projekten Debian, Arch Linux und Fedora erstellt. In Ubuntu, RHEL und SUSE befinden sich die Updates in der Vorbereitung.
Das Problem tritt in der Funktion xt_compat_target_from_user() aufgrund einer fehlerhaften Berechnung der Größe des Speichers auf, wenn Strukturen des Kernels nach der Umwandlung von 32-Bit- in 64-Bit-Darstellungen gespeichert werden. Der Fehler ermöglicht es, vier Null-Bytes an jeder Position außerhalb des zugewiesenen Puffers zu schreiben, begrenzt durch die Verschiebung 0x4C. Diese Möglichkeit war ausreichend, um einen Exploit zu erstellen, der den Erwerb von Root-Rechten ermöglicht – durch das Bereinigen des Zeigers m_list->next in der Struktur msg_msg wurden Bedingungen geschaffen, die den Zugriff auf Daten nach der Speicherfreigabe (Use-after-free) ermöglichten, was dann verwendet wurde, um Informationen über Adressen zu erhalten und andere Strukturen durch Manipulation des system calls msgsnd() zu verändern.
Quelle: opennet.ru
