Die Firma Qualys hat eine Sicherheitsanfälligkeit (CVE-2025-6019) in der Bibliothek libblockdev entdeckt, die es ermöglicht, über Manipulationen mit dem Hintergrundprozess udisks Root-Rechte im System zu erlangen. Ein Prototyp des Exploits wurde in Ubuntu, Debian, Fedora und openSUSE Leap 15 demonstriert.
Der Prozess udisks wird in nahezu allen Linux-Distributionen verwendet und bietet eine D-Bus-Schnittstelle für die Durchführung von Operationen mit Speichermedien, wie z.B. das Mounten und Formatieren. Um Aktionen mit Speichermedien durchzuführen, ruft udisks die Funktionen der Bibliothek libblockdev auf. Der Zugriff auf udisks ist standardmäßig nur für Benutzer geöffnet, die im Kontext 'allow_active' arbeiten, d.h. die physischen Zugriff auf den Computer haben und sich über die lokale Konsole oder einen grafischen Sitzungsstart verbunden haben. Benutzer, die sich remote verbinden, beispielsweise über ssh, fallen nicht in diesen Kontext und können die Sicherheitsanfälligkeit nicht direkt ausnutzen.
Um diese Einschränkung zu umgehen, kann ein Trick verwendet werden, der es ermöglicht, das Authentifizierungsniveau auf „allow_active“ zu erhöhen, indem man das Benutzer-Dienstsystemtool systemctl manipuliert, was von polkitd als Zeichen einer lokalen Sitzung wahrgenommen wird. Der Kern der Methode besteht darin, dass polkitd das Vorhandensein von physischem Zugang bestimmt und das Niveau „allow_active“ auf der Grundlage indirekter Indikatoren zuweist, die beeinflussbar sind. Die Einschränkungen der Methode bestehen darin, dass polkitd einen aktiven Sitzung eines lokalen Benutzers mit physischem Zugang in der Systemumgebung erfordert, um getäuscht zu werden.
Die zweite Methode zur Erlangung der Rechte „allow_active“ besteht darin, eine Schwachstelle (CVE-2025-6018) in PAM (Pluggable Authentication Modules) auszunutzen, die von Forschern von Qualys während der Analyse einer Schwachstelle in libblockdev entdeckt wurde. Die Schwachstelle ermöglicht es jedem Benutzer, einschließlich derjenigen, die sich per SSH verbinden, Operationen im Kontext von „allow_active“ auszuführen. Das Problem ist spezifisch für die PAM-Konfigurationen in openSUSE Leap 15 und SUSE Linux Enterprise 15 und tritt nur in diesen Distributionen auf.
Im pam_env-Modul in openSUSE und SUSE ist das Lesen der Datei ~/.pam_environment standardmäßig aktiviert. Über diese Datei kann der Benutzer die Umgebungsvariablen XDG_SEAT=seat0 und XDG_VTNR=1 setzen, die bei weiterer Verarbeitung als Indikator für die physische Anwesenheit des Benutzers wahrgenommen werden, selbst wenn der Zugriff tatsächlich über SSH erfolgt. Das pam_env-Modul wird auch beim SSH-Zugang in Debian 12 und Ubuntu 24.04 aufgerufen (in Debian 13 und Ubuntu 24.10+ ist es deaktiviert), jedoch können in diesen Distributionen gesetzte Umgebungsvariablen nicht zur Erhöhung des Zugriffs auf "allow_active" verwendet werden, da pam_env in der Endphase nach dem Laden des pam_systemd-Moduls aufgerufen wird und die gesetzten Umgebungsvariablen keinen Einfluss auf die Sitzungseinstellungen haben können.
Bei der Schwachstelle in libblockdev kann ein Angreifer ein Abbild eines beliebigen Dateisystems im Loop-Modus einhängen, indem er eine ausführbare Datei mit dem SUID-Root-Flag oder ein spezielles Gerät (/dev/mem) für den Low-Level-Zugriff auf Festplatten oder den Speicher in diesem Abbild platziert. Um solche Angriffe zu verhindern, werden die FS-Abbilder vom System mit den Flags nosuid und nodev eingehängt, jedoch ermöglicht die Schwachstelle in libblockdev, ein Abbild ohne die Flags nosuid und nodev einzuhängen. Der Kern der Schwachstelle besteht darin, dass udisks es einem Benutzer mit dem Zugriffslevel „allow_active“ erlaubt, die Größe seiner Dateisysteme zu ändern, wobei libblockdev während dieses Vorgangs vorübergehend das Dateisystem ohne das Setzen der Flags nosuid und nodev einhängt.
Somit reduziert sich der Angriff auf die Erstellung eines Loop-Geräts basierend auf einem XFS-Image, in dem sich eine suid root-Datei befindet, die Initialisierung der Operation zur Größenänderung des Loop-Geräts und die Überwachung des Moments, an dem es im Verzeichnis /tmp/blockdev* gemountet wird: victim> killall -KILL gvfs-udisks2-volume-monitor victim> udisksctl loop-setup —file ./xfs.image —no-user-interaction Zugeordnetes Datei ./xfs.image als /dev/loop0. victim> while true; do /tmp/blockdev*/bash -c ‘sleep 10; ls -l /tmp/blockdev*/bash’ && break; done 2>/dev/null & victim> gdbus call —system —dest org.freedesktop.UDisks2 —object-path /org/freedesktop/UDisks2/block_devices/loop0 —method org.freedesktop.UDisks2.Filesystem.Resize 0 ‘{}’ Fehler: GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Fehler beim Ändern der Dateisystemgröße auf /dev/loop0: Ziel ist beschäftigt -r-sr-xr-x. 1 root root 1406608 Jun 18 09:42 /tmp/blockdev.RSM429/bash victim> /tmp/blockdev*/bash -p victim# id uid=65534(nobody) gid=65534(nobody) euid=0(root) groups=65534(nobody)
Die Schwachstelle in libblockdev wurde bislang nur durch Patches behoben. Der Status der neuen Paketversion oder der Vorbereitung eines Fixes in den Distributionen kann auf folgenden Seiten überprüft werden (wenn die Seite nicht erreichbar ist, haben die Entwickler der Distribution noch nicht mit der Behandlung des Problems begonnen): Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo und Arch (1, 2). Als Workaround zur Blockierung der Schwachstelle kann die Zugriffsregel für die Operation „org.freedesktop.udisks2.modify-device“ in polkit geändert werden, indem im Dateipfad /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy der Wert des Parameters „allow_active“ von „yes“ auf „auth_admin“ geändert wird.
Zusätzlich ist eine vor mehreren Stunden veröffentlichte Sicherheitsanfälligkeit (CVE-2025-6020) im Paket linux-pam zu erwähnen, die es einem lokalen Benutzer ermöglicht, Root-Rechte zu erlangen. Das Modul pam_namespace hat Dateipfade, die vom Benutzer kontrolliert werden, nicht korrekt überprüft, was durch Manipulationen mit symbolischen Links und das Erreichen eines Zeitrennenzustands zu einer Überschreibung privilegierter Dateien im System führte. Die Sicherheitsanfälligkeit wurde in der Version linux-pam 1.7.1 behoben. Der Status der neuen Paketversion oder das Vorhandensein eines Fixes in den Distributionen kann auf folgenden Seiten überprüft werden: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo und Arch (1, 2).
Quelle: opennet.ru
