Im Linux-Kernel wurden zwei Schwachstellen entdeckt, die im Wesentlichen der vor wenigen Tagen enthüllten Schwachstelle Copy Fail ähneln, sich jedoch in anderen Teilsystemen manifestieren – xfrm-ESP und RxRPC. Der Serie von Schwachstellen wurde der Code-Name Dirty Frag (auch die Bezeichnung Copy Fail 2 kommt vor) zugewiesen. Diese Schwachstellen ermöglichen es einem nicht privilegierten Benutzer, root-Rechte zu erlangen, indem sie Daten eines Prozesses im Seitencache überschreiben. Ein Exploit ist verfügbar, der in allen aktuellen Linux-Distributionen funktioniert. Informationen über die Schwachstelle wurden vor der Veröffentlichung von Korrekturen offengelegt, es gibt jedoch eine Umgehungsmethode, um das Problem zu blockieren.
Dirty Frag umfasst zwei verschiedene Schwachstellen: Die erste im Modul xfrm-ESP, das zur Beschleunigung von Verschlüsselungsoperationen in IPsec unter Verwendung des ESP-Protokolls (Encapsulating Security Payload) eingesetzt wird, und die zweite im RxRPC-Treiber, der eine Familie von Sockets AF_RXRPC und das gleichnamige RPC-Protokoll, das über UDP arbeitet, implementiert. Jede der Schwachstellen alleine ermöglicht es, root-Rechte zu erlangen. Die Schwachstelle im xfrm-ESP existiert im Linux-Kernel seit Januar 2017, während die Schwachstelle im RxRPC seit Juni 2023 besteht. Beide Probleme wurden durch Optimierungen verursacht, die eine direkte Schreibzugriffs auf den Seitencache erlauben.
Um die Schwachstelle in xfrm-ESP auszunutzen, muss der Benutzer die Berechtigung zur Erstellung von Namensräumen haben, während für die Ausnutzung der Schwachstelle im RxRPC die Möglichkeit bestehen muss, das Kernel-Modul rxrpc.ko zu laden. In Ubuntu beispielsweise ist es in den AppArmor-Regeln einem nicht privilegierten Benutzer untersagt, Namensräume zu erstellen, aber das Modul rxrpc.ko wird standardmäßig geladen. In einigen Distributionen fehlt das Modul rxrpc.ko, jedoch wird die Erstellung von Namensräumen nicht blockiert. Der Entdecker des Problems hat einen kombinierten Exploit vorbereitet, der in der Lage ist, das System über beide Schwachstellen anzugreifen, was eine Ausnutzung des Problems in allen großen Distributionen ermöglicht. Die Funktionsfähigkeit des Exploits wurde in Ubuntu 24.04.4 mit dem Kernel 6.17.0-23, RHEL 10.1 mit dem Kernel 6.12.0-124.49.1, openSUSE Tumbleweed mit dem Kernel 7.0.2-1, CentOS Stream 10 mit dem Kernel 6.12.0-224, AlmaLinux 10 mit dem Kernel 6.12.0-124.52.3 und Fedora 44 mit dem Kernel 6.19.14-300 bestätigt.
Wie im Fall der Schwachstelle Copy Fail wurden die Probleme in xfrm-ESP und RxRPC durch die Durchführung der Datenentschlüsselung vor Ort mit der Funktion splice() verursacht, die Daten zwischen Dateideskriptoren und Pipes übergibt, ohne sie zu kopieren, indem sie Verweise auf Elemente im Seitencache überträgt. Die Offsets für die Schreiboperationen wurden ohne angemessene Prüfungen berechnet, die die Verwendung direkter Verweise auf Elemente im Seitencache berücksichtigen, was es ermöglichte, durch das Senden speziell gestalteter Anfragen 4 Bytes an der gewählten Offset-Adresse zu überschreiben und den Inhalt einer beliebigen Datei, die sich im Seitencache befindet, zu ändern.
Alle Datei-Leseoperationen geben zunächst den Inhalt aus dem Seitencache zurück. Im Falle einer Modifikation der Daten im Seitencache führen Leseoperationen aus Dateien zur Rückgabe von Informationen, die nicht tatsächlich auf dem Speichergerät gespeichert sind, sondern von Ersatzdaten. Der Missbrauch der Schwachstelle besteht darin, den Seitencache für die ausführbare Datei mit dem suid-root-Flag zu ändern. Um beispielsweise Root-Rechte zu erlangen, kann die ausführbare Datei /usr/bin/su gelesen und in den Seitencache eingefügt werden, wonach die Einfügung eigenen Codes in den in den Seitencache geladenen Inhalt dieser Datei erreicht wird. Der nachfolgende Start des „su“-Tools wird dazu führen, dass nicht die Originaldatei von dem Speichergerät in den Speicher geladen wird, sondern eine veränderte Kopie aus dem Seitencache.
Die Offenlegung von Informationen über Schwachstellen und die koordinierte Veröffentlichung von Updates zur Behebung der Probleme war für den 12. Mai geplant, doch aufgrund der Informationsleckage mussten die Informationen über die Schwachstelle vor der Veröffentlichung der Korrekturen veröffentlicht werden. Ende April wurden in der öffentlichen Mailingliste netdev Patches für rxrpc, ipsec und xfrm veröffentlicht, ohne zu erwähnen, dass sie mit der Behebung der Schwachstelle in Verbindung stehen. Am 5. Mai nahm der Maintainer des IPsec-Subsystems die Änderung mit dem vorgeschlagenen Fix im Modul xfrm-esp in das Git-Repository netdev auf, dessen Beschreibung weitgehend die Schwierigkeiten wiederholte, die zur Copy Fail-Schwachstelle im Modul algif_aead führten. Ein Sicherheitsforscher wurde auf diesen Fix aufmerksam, schaffte es, einen funktionierenden Exploit zu erstellen und veröffentlichte ihn, ohne zu wissen, dass eine Embargofrist bis zum 12. Mai für die Offenlegung der Problemdaten eingeführt worden war.
Updates mit Korrekturen für den Linux-Kernel und Kernpakete in den Distributionen wurden bisher nicht veröffentlicht, jedoch sind Problempatches verfügbar – xfrm-esp und rxrpc. CVE-Identifikatoren wurden nicht zugewiesen, was die Nachverfolgung der Paketaktualisierungen in den Distributionen erschwert. Als Umgehung zur Sicherung können die Kernelmodule esp4, esp6 und rxrpc blockiert werden: 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
