Im Linux-Kernel wurden zwei Schwachstellen entdeckt, die im Wesentlichen ähnlich der vor wenigen Tagen veröffentlichten Copy Fail-Schwachstelle sind, jedoch in anderen Subsystemen – xfrm-ESP und RxRPC – auftreten. Die Schwachstellen wurden unter dem Codenamen Dirty Frag (auch Copy Fail 2 genannt) zusammengefasst. Sie ermöglichen es einem nicht privilegierten Benutzer, Root-Rechte zu erlangen, indem Daten eines Prozesses im Seiten-Cache überschrieben werden. Ein Exploit, der in allen aktuellen Linux-Distributionen funktioniert, ist verfügbar. Informationen zur Schwachstelle wurden vor der Veröffentlichung von Patches offengelegt, doch es gibt einen Workaround zur Blockierung des Problems.
Dirty Frag betrifft zwei verschiedene Schwachstellen: Die erste im xfrm-ESP-Modul, das zur Beschleunigung von Verschlüsselungsoperationen in IPsec mit dem ESP-Protokoll (Encapsulating Security Payload) verwendet wird, und die zweite im RxRPC-Treiber, der die AF_RXRPC-Socket-Familie sowie das gleichnamige RPC-Protokoll implementiert, das über UDP funktioniert. Jede der Schwachstellen ermöglicht es einzeln, Root-Rechte zu erlangen. Die Schwachstelle im xfrm-ESP besteht im Linux-Kernel seit Januar 2017, während die Schwachstelle im RxRPC seit Juni 2023 besteht. Beide Probleme entstehen durch Optimierungen, die direkten Schreibzugriff auf den Seiten-Cache ermöglichen.
Um die Schwachstelle in xfrm-ESP auszunutzen, muss der Benutzer über die Berechtigung zur Erstellung von Namensräumen verfügen, und um die Schwachstelle in RxRPC auszunutzen, ist die Möglichkeit erforderlich, das Kernelmodul rxrpc.ko zu laden. Beispielsweise ist in Ubuntu gemäß den AppArmor-Richtlinien das Erstellen von Namensräumen für nicht privilegierte Benutzer nicht gestattet, das Modul rxrpc.ko wird jedoch standardmäßig geladen. In einigen Distributionen fehlt das Modul rxrpc.ko, das Erstellen von Namensräumen wird jedoch nicht blockiert. Der Forscher, der das Problem entdeckt hat, hat einen kombinierten Exploit vorbereitet, der in der Lage ist, das System über beide Schwachstellen anzugreifen, wodurch das Problem in allen großen Distributionen ausgenutzt werden kann. Die Funktionalität des Exploits wurde in Ubuntu 24.04.4 mit Kernel 6.17.0-23, RHEL 10.1 mit Kernel 6.12.0-124.49.1, openSUSE Tumbleweed mit Kernel 7.0.2-1, CentOS Stream 10 mit Kernel 6.12.0-224, AlmaLinux 10 mit Kernel 6.12.0-124.52.3 und Fedora 44 mit Kernel 6.19.14-300 bestätigt.
Wie bei der Copy Fail-Schwachstelle wurden die Probleme in xfrm-ESP und RxRPC durch die Dekodierung von Daten im Speicher mittels der Funktion splice() verursacht, die Daten zwischen Dateideskriptoren und Pipes überträgt, ohne sie zu kopieren, indem sie Referenzen auf Elemente im Seitencache weitergibt. Die Offsets für die Schreiboperation wurden ohne die erforderlichen Überprüfungen berechnet, die die Verwendung direkter Referenzen auf die Elemente im Seitencache berücksichtigen, was es ermöglichte, durch das Senden speziell gestalteter Anfragen 4 Bytes an der gewählten Offsetposition zu überschreiben und den Inhalt einer beliebigen Datei im Seitencache zu verändern.
Alle Leseoperationen aus Dateien geben zunächst den Inhalt aus dem Seiten-Cache zurück. Bei einer Modifikation der Daten im Seiten-Cache führen Leseoperationen aus der Datei dazu, dass nicht die tatsächlich auf dem Speicher gespeicherten Informationen, sondern manipulierte Daten zurückgegeben werden. Der Missbrauch dieser Schwachstelle besteht darin, den Seiten-Cache für eine ausführbare Datei mit dem SUID-Root-Flag zu verändern. Beispielsweise kann man, um Root-Rechte zu erlangen, die ausführbare Datei /usr/bin/su lesen, um sie in den Seiten-Cache zu laden. Danach kann man erreichen, dass der eigene Code im aus dem Seiten-Cache geladenen Inhalt dieser Datei ersetzt wird. Der nachfolgende Start des Tools „su“ führt dazu, dass nicht die originale ausführbare Datei vom Speicher, sondern eine modifizierte Kopie aus dem Seiten-Cache in den Arbeitsspeicher geladen wird.
Die Offenlegung von Schwachstellen und die koordinierte Veröffentlichung von Problemlösungsupdates waren für den 12. Mai geplant, jedoch musste aufgrund eines Informationslecks die Schwachstelle vor der Veröffentlichung der Korrekturen veröffentlicht werden. Ende April wurden im öffentlichen Mailinglisten-Archiv von netdev Patches für rxrpc, ipsec und xfrm veröffentlicht, ohne zu erwähnen, dass sie mit der Behebung der Schwachstelle in Verbindung standen. Am 5. Mai nahm der Maintainer des IPsec-Subsystems eine Änderung des vorgeschlagenen Fixes im Modul xfrm-esp in das Git-Repository von netdev auf; die Beschreibung ähnelte stark der Beschreibung des Problems, das zur Schwachstelle Copy Fail im Modul algif_aead führte. Ein Sicherheitsforscher interessierte sich für diesen Fix, konnte einen funktionierenden Exploit erstellen und veröffentlichte ihn, ohne zu wissen, dass es ein Embargo auf die Offenlegung der Informationen bis zum 12. Mai gab.
Aktualisierungen mit Korrekturen für den Linux-Kernel und die Kernel-Pakete in Distributionen sind bisher nicht veröffentlicht, jedoch sind Problemlösungs-Patches verfügbar – xfrm-esp und rxrpc. CVE-Identifikatoren wurden nicht zugewiesen, was das Nachverfolgen von Paketaktualisierungen in den Distributionen erschwert. Als vorübergehenden Schutz können Sie den Ladevorgang der Kernel-Module esp4, esp6 und rxrpc blockieren: sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"
Quelle: opennet.ru
