Lokale Root-Sicherheitsanfälligkeiten in den Paketverwaltungstools von Snap

Das Unternehmen Qualys hat zwei Schwachstellen (CVE-2021-44731, CVE-2021-44730) in dem mit dem SUID root-Flag ausgelieferten Dienstprogramm snap-confine festgestellt, das von dem Prozess snapd aufgerufen wird, um die Ausführungsumgebung für in eigenständigen Snap-Paketen bereitgestellte Anwendungen zu erstellen. Die Schwachstellen ermöglichen es einem lokalen nicht privilegierten Benutzer, Code mit Root-Rechten im System auszuführen. Die Probleme wurden in der heutigen Aktualisierung des snapd-Pakets für Ubuntu 21.10, 20.04 und 18.04 behoben.

Die erste Schwachstelle (CVE-2021-44730) ermöglicht einen Angriff durch Manipulation hart verlinkter Dateien, erfordert jedoch, dass der systemweite Schutz für harte Links ausgeschaltet ist (die Einstellung von sysctl fs.protected_hardlinks auf 0). Das Problem wird durch eine fehlerhafte Überprüfung des Speicherorts der ausführbaren Dateien der Hilfsprogramme snap-update-ns und snap-discard-ns verursacht, die mit Root-Rechten ausführen. Der Pfad zu diesen Dateien wird in der Funktion sc_open_snapd_tool() auf Grundlage des eigenen Pfades aus /proc/self/exe berechnet, was es ermöglicht, einen harten Link zu snap-confine im eigenen Verzeichnis zu erstellen und dort eigene Versionen der Tools 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, die der Angreifer bereitgestellt hat, aus dem aktuellen Verzeichnis ausführen.

Die zweite Schwachstelle wird durch einen Konkurrenzzustand verursacht und kann in der Standardkonfiguration von Ubuntu Desktop ausgenutzt werden. Um den Exploit erfolgreich auf Ubuntu Server auszuführen, ist es erforderlich, während der Installation eines der Pakete aus der Kategorie „Featured Server Snaps“ auszuwählen. Der Konkurrenzzustand 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 vorhandenes, um Bind-Mounts von Verzeichnissen für das Snap-Paket dorthin zu erstellen.

Da der Name des temporären Verzeichnisses vorhersehbar ist, kann ein Angreifer dessen Inhalt in eine symbolische Verknüpfung ändern, nachdem die Eigentümerüberprüfung erfolgt ist, aber bevor der Systemaufruf mount aufgerufen wird. Zum Beispiel kann man im Verzeichnis /tmp/snap.lxd eine symbolische Verknüpfung „/tmp/snap.lxd/tmp“ erstellen, die auf ein beliebiges Verzeichnis verweist, und der Aufruf von mount() wird der symbolischen Verknüpfung folgen und das Verzeichnis im Snap-Namensraum einhängen. Auf ähnliche Weise kann man seinen Inhalt in /var/lib einhängen und durch den Austausch von /var/lib/snapd/mount/snap.snap-store.user-fstab das Einhängen seines Verzeichnisses /etc im Snap-Paket-Namensraum organisieren, um seine Bibliothek mit root-Rechten über den Austausch von /etc/ld.so.preload zu laden.

Es wird festgestellt, dass die Erstellung eines Exploits eine nicht triviale Aufgabe war, da das Tool snap-confine in der Programmiersprache Go unter Verwendung sicherer Programmiertechniken geschrieben wurde, einen Schutz auf Basis von AppArmor-Profilen hat, Systemaufrufe über den seccomp-Mechanismus filtert und zur Isolierung einen Namensraum für das Einhängen verwendet. 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 Benutzer die bereitgestellten Updates installiert haben.

Quelle: opennet.ru

60GB SSD 8Gb DDR4