Das Unternehmen Qualys hat zwei Sicherheitsanfälligkeiten (CVE-2021-44731, CVE-2021-44730) in dem mit dem SUID-Root-Flag ausgelieferten Tool snap-confine festgestellt, das von dem Prozess snapd aufgerufen wird, um eine Ausführungsumgebung für Anwendungen bereitzustellen, die in selbständigen Paketen im Snap-Format geliefert werden. Diese Sicherheitsanfälligkeiten ermöglichen es einem lokalen nicht privilegierten Benutzer, Code mit Root-Rechten im System auszuführen. Die Probleme wurden mit dem heutigen Update der snapd-Pakete für Ubuntu 21.10, 20.04 und 18.04 behoben.
Die erste Schwachstelle (CVE-2021-44730) ermöglicht einen Angriff durch Manipulation von harten Links, erfordert jedoch die Deaktivierung des Systemschutzes für harte Links (Einstellung von sysctl fs.protected_hardlinks auf 0). Das Problem wird durch eine fehlerhafte Überprüfung des Standorts ausführbarer Dateien der Hilfsprogramme snap-update-ns und snap-discard-ns verursacht, die mit Root-Rechten ausgeführt werden. Der Pfad zu diesen Dateien wurde in der Funktion sc_open_snapd_tool() basierend auf dem eigenen Pfad aus /proc/self/exe berechnet, was es ermöglicht, einen harten Link zu snap-confine in einem eigenen Verzeichnis zu erstellen und in diesem Verzeichnis eigene Varianten der Programme snap-update-ns und snap-discard-ns abzulegen. Nach dem Start über den harten Link wird snap-confine mit Root-Rechten die Dateien snap-update-ns und snap-discard-ns aus dem aktuellen Verzeichnis ausführen, die vom Angreifer bereitgestellt wurden.
Die zweite Schwachstelle wird durch einen Rennzustand verursacht und kann in der standardmäßigen Ubuntu Desktop-Konfiguration ausgenutzt werden. Für eine erfolgreiche Ausnutzung auf Ubuntu Server ist es erforderlich, während der Installation eines der Pakete aus dem Abschnitt „Featured Server Snaps“ auszuwählen. Der Rennzustand tritt in der Funktion setup_private_mount() auf, die während der Vorbereitung des Namensraums der Mount-Punkte für das Snap-Paket aufgerufen wird. Diese Funktion erstellt ein temporäres Verzeichnis „/tmp/snap.$SNAP_NAME/tmp“ oder verwendet ein bereits bestehendes Verzeichnis für die Bind-Montierung der Verzeichnisse des Snap-Pakets.
Da der Name des temporären Verzeichnisses vorhersehbar ist, kann ein Angreifer dessen Inhalt nach der Überprüfung des Eigentümers, aber vor dem Aufruf des Systemaufrufs mount durch eine symbolische Verknüpfung ersetzen. Beispielsweise kann eine symbolische Verknüpfung "/tmp/snap.lxd/tmp" im Verzeichnis /tmp/snap.lxd erstellt werden, die auf ein beliebiges Verzeichnis verweist. Der Aufruf von mount() folgt dann dieser symbolischen Verknüpfung und bindet das Verzeichnis im Snap-Namespace. Auf ähnliche Weise kann man seinen eigenen Inhalt in /var/lib einbinden, indem man /var/lib/snapd/mount/snap.snap-store.user-fstab ersetzt, um das Verzeichnis /etc im Namespace des Snap-Pakets so zu mounten, dass die eigene Bibliothek mit Root-Rechten über /etc/ld.so.preload geladen wird.
Es wurde festgestellt, dass die Erstellung eines Exploits eine komplexe Aufgabe darstellt, da das Tool snap-confine in der Programmiersprache Go unter Berücksichtigung sicherer Programmiertechniken geschrieben wurde. Es verfügt über einen Schutz auf Basis von AppArmor-Profilen, filtert Systemaufrufe mit dem Seccomp-Mechanismus und nutzt Namensräume zur Isolation bei der Montage. Dennoch gelang es den Forschern, einen funktionierenden Exploit zur Erlangung von Root-Rechten im System vorzubereiten. Der Code des Exploits wird in einigen Wochen veröffentlicht, nachdem die Nutzer die bereitgestellten Updates installiert haben.
Quelle: opennet.ru
