Forscher des Unternehmens Xint haben eine Schwachstelle im Linux-Kernel (CVE-2026-31431) entdeckt, die es einem nicht privilegierten Benutzer ermöglicht, Root-Zugriff auf das System zu erhalten. Der Problematik wurde der Codenamen Copy Fail zugeordnet. Ein Prototyp des Exploits ist verfügbar. Die Möglichkeit, die Schwachstelle auszunutzen, wurde in Ubuntu 24.04 LTS, Amazon Linux 2023, RHEL 10.1 und SUSE 16 demonstriert, jedoch wird angemerkt, dass Kernel-Pakete aus anderen Distributionen, einschließlich Debian, Arch, Fedora, Rocky und Alma, ebenfalls betroffen sind, aber nicht separat getestet wurden.
Die Schwachstelle wird durch einen logischen Fehler in der Crypto-API (AF_ALG) des Linux-Kernels verursacht, der 2017 bei der Implementierung einer Optimierung aufgetreten ist, die eine überflüssige Pufferspeicherung durch in-place Ausführung von AEAD (Authenticated Encryption with Associated Data) Operationen beseitigt. Das Problem entstand durch eine unbedachte Verwendung der Funktion splice(), die Daten zwischen Dateideskriptoren und Rohren (pipe) ohne Kopieren übergibt, indem sie Verweise auf Elemente im Seitenpuffer überträgt. Nach der Implementierung der Optimierung wurde bei der Übergabe einer Datei an den AF_ALG-Socket zur Entschlüsselung nicht auf einen separaten Puffer verwiesen, sondern direkt auf Elemente des Seitenpuffers des Kernels mit den Datei-Inhalten.
Im weiteren Verlauf des Entschlüsselungsprozesses wurden die über Verweise gebundenen Daten des Authentifizierungstags mit den in den RX-Puffer kopierten zusätzlichen authentifizierbaren Daten (AAD, Associated Authenticated Data) und dem Ciphertext vermischt, während die Verschiebung für die Schreiboperation im Authentifizierungstag relativ zu den kopierten Daten ohne angemessene Überprüfungen berechnet wurde, was es ermöglichte, beliebige Bereiche im Seitenpuffer zu überschreiben.
Die Schwachstelle ermöglicht es, bei jeder Anfrage 4 Bytes an einer gewählten Verschiebung zu überschreiben, wodurch ein Angreifer durch das Senden einer Reihe von Anfragen den Inhalt jeder lesbaren Datei im System im Seitenpuffer ändern kann, nachdem er erreicht hat, dass sie in den Cache geladen wird. Da bei allen Lesevorgängen aus Dateien der Inhalt in erster Linie aus dem Seitenpuffer geliefert wird, erhält der Kernel oder der Prozess beim Lesen von Daten aus einer Datei nicht die tatsächlichen, sondern die manipulierten Daten, was zur Injektion von Code in ausführbare Dateien oder in geladene gemeinsame Bibliotheken verwendet werden kann.
Um Code mit Root-Rechten auszuführen, reicht es aus, den Seitencache für jede ausführbare Datei mit dem SUID-Root-Flag zu ändern.
Im vorgeschlagenen Exploit wird die ausführbare Datei /usr/bin/su gelesen und der Inhalt dieser Datei, der in den Seitencache geladen wird, so modifiziert, dass eigener Code eingefügt wird. Bei der nächsten Ausführung des «su»-Utilities wird nicht die originale ausführbare Datei vom Speicher geladen, sondern eine modifizierte Kopie aus dem Seitencache.
Der Exploit ist universell, benötigt keine Anpassung an Distributionen oder Kernel-Versionen und kann mit allen Distributionen verwendet werden. Da bei der Verwendung von Containerisolierung für alle Container ein gemeinsamer Seitencache verwendet wird, kann die Schwachstelle genutzt werden, um über den Container Zugriff auf die Host-Umgebung zu erhalten (später wird ein Exploit zum Umgehen der Isolation in Kubernetes veröffentlicht).
Die Schwachstelle wurde mit Hilfe von KI nach etwa einer Stunde Experimentieren mit der Analyse des Codes des Kryptosubsystems des Kernels identifiziert. Das Problem tritt ab Kernel Linux 4.14 auf, der 2017 veröffentlicht wurde, und wurde in den Kernen 6.18.22, 6.19.12 und 7.0 behoben. Den Status der Behebung von Sicherheitsanfälligkeiten in den Distributionen kann man auf diesen Seiten einsehen: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch,
Fedora, ROSA.
Als Workaround zum Schutz kann das Kernel-Modul algif_aead deaktiviert werden, das in OpenSSL bei expliziter Aktivierung des afalg-Engines und in bestimmten Anwendungen verwendet wird (das Vorhandensein solcher laufenden Anwendungen kann mit dem Befehl «lsof | grep AF_ALG» überprüft werden):
echo «install algif_aead /bin/false» > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead
Quelle: opennet.ru
