Das Unternehmen Qualys hat eine Sicherheitsanfälligkeit (CVE-2025-6019) in der Bibliothek libblockdev entdeckt, die es durch Manipulation mit dem Hintergrundprozess udisks ermöglicht, root-Rechte im System zu erlangen. Der Prototyp eines Exploits wurde in Ubuntu, Debian, Fedora und openSUSE Leap 15 demonstriert.
Der Prozess udisks wird in nahezu allen Linux-Distributionen eingesetzt und bietet eine D-Bus-Schnittstelle zur Durchführung von Operationen mit Speichergeräten, wie z. B. Mounten und Formatieren. Um Aktionen mit den Speichergeräten durchzuführen, ruft udisks Funktionen der Bibliothek libblockdev auf. Der Zugang zu udisks ist standardmäßig nur für Benutzer geöffnet, die im Kontext „allow_active“ arbeiten, d. h. die physischen Zugang zum Computer haben und sich über die lokale Konsole oder einen grafischen Sitzung verbunden haben. Benutzer, die sich remote, z. B. über SSH, verbinden, 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 erlaubt, das Authentifizierungsniveau auf „allow_active“ zu erhöhen, indem mit dem Start der systemctl-Dienste des Benutzers manipuliert wird, was polkitd als Hinweis auf eine lokale Sitzung wahrnimmt. Der Kern der Methode besteht darin, dass polkitd das Vorhandensein physischen Zugangs erkennt und das Niveau „allow_active“ basierend auf indirekten Anzeichen zuweist, die manipuliert werden können. Die Einschränkungen der Methode bestehen darin, dass zum Täuschen von polkitd ein aktives Sitzung eines lokalen Benutzers mit physischem Zugang erforderlich ist.
Die zweite Methode zur Erlangung von „allow_active“-Rechten besteht in der Ausnutzung einer Sicherheitsanfälligkeit (CVE-2025-6018) in PAM (Pluggable Authentication Modules), die von Forschern bei Qualys während der Untersuchung der Sicherheitsanfälligkeit in libblockdev gefunden wurde. Die Sicherheitsanfälligkeit ermöglicht es jedem Benutzer, einschließlich derjenigen, die sich über SSH verbinden, Operationen im Kontext „allow_active“ durchzuführen. Das Problem ist spezifisch für die PAM-Einstellungen in openSUSE Leap 15 und SUSE Linux Enterprise 15 und tritt nur in diesen Distributionen auf.
Im Modul pam_env 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 interpretiert werden, auch wenn der Zugang tatsächlich über SSH erfolgt. Das Modul pam_env wird auch bei der SSH-Verbindung in Debian 12 und Ubuntu 24.04 aufgerufen (in Debian 13 und Ubuntu 24.10+ ist es deaktiviert), jedoch kann das Setzen der Umgebungsvariablen in diesen Distributionen nicht zur Erhöhung des Zugriffslevels auf „allow_active“ verwendet werden, da pam_env in der finalen Phase nach dem Laden des Moduls pam_systemd aufgerufen wird und die gesetzten Umgebungsvariablen keinen Einfluss auf die Sitzungsparameter haben können.
Was die Schwachstelle in libblockdev betrifft, kann ein Angreifer ein Abbild eines beliebigen Dateisystems im Loop-Modus einbinden, indem er in diesem Abbild 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 Speicher platziert. Um solche Angriffe zu verhindern, werden die Abbild-Dateisysteme vom System mit den Flags nosuid und nodev eingehängt, aber die Schwachstelle in libblockdev ermöglicht das Einbinden eines Abbilds ohne die Flags nosuid und nodev. Der Kern der Schwachstelle liegt darin, dass udisks einem Benutzer mit dem Zugriffslevel „allow_active“ erlaubt, die Größe seiner Dateisysteme zu ändern, und libblockdev während dieses Vorgangs das Dateisystem vorübergehend ohne Setzen der Flags nosuid und nodev einbindet.
Somit besteht der Angriff darin, ein Loop-Gerät auf Basis des XFS-Abbilds zu erstellen, in dem eine SUID-Root-Datei abgelegt ist, eine Operation zur Größenänderung des Loop-Geräts zu initiieren und den Moment seiner Einbindung in das Verzeichnis /tmp/blockdev* zu überwachen: victim> killall -KILL gvfs-udisks2-volume-monitor victim> udisksctl loop-setup —file ./xfs.image —no-user-interaction Mapped file ./xfs.image as /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 ‘{}’ Error: GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Error resizing filesystem on /dev/loop0: Failed to unmount ‘/dev/loop0’ after resizing it: target is busy -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 bisher nur in Form von Patches behoben. Der Status der neuen Version des Pakets oder die Vorbereitung eines Fixes in den Distributionen kann auf den folgenden Seiten überprüft werden (wenn die Seite nicht verfügbar ist, haben die Entwickler der Distribution noch nicht mit der Prüfung 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 der Wert des Parameters „allow_active“ in der Datei /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy von „yes“ auf „auth_admin“ geändert wird.
Zusätzlich kann die vor wenigen Stunden aufgedeckte Schwachstelle (CVE-2025-6020) im Paket linux-pam erwähnt werden, die es einem lokalen Benutzer ermöglicht, Root-Rechte zu erlangen. Das Modul pam_namespace überprüfte die vom Benutzer kontrollierten Dateipfade nicht ordnungsgemäß, wodurch durch Manipulationen mit symbolischen Links und das Erreichen eines Rennens das Überschreiben von privilegierten Dateien im System möglich wurde. Die Schwachstelle wurde in der Version linux-pam 1.7.1 behoben. Der Status der neuen Version des Pakets oder die Vorbereitung eines Fixes in den Distributionen kann auf den folgenden Seiten überprüft werden: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo und Arch (1, 2).
Quelle: opennet.ru
