Lokale Root-Schwachstellen im Snap-Paketverwaltungs-Toolkit

Qualys hat zwei Schwachstellen (CVE-2021-44731, CVE-2021-44730) im Dienstprogramm snap-confine identifiziert, das mit dem SUID-Root-Flag bereitgestellt und vom snapd-Prozess aufgerufen wird, um eine ausführbare Umgebung für Anwendungen zu erstellen, die in eigenständigen Paketen bereitgestellt werden im Snap-Format. Die Schwachstellen ermöglichen es einem lokalen unprivilegierten Benutzer, Code mit Root-Rechten auf dem System auszuführen. Die Probleme werden im heutigen snapd-Paket-Update für Ubuntu 21.10, 20.04 und 18.04 behoben.

Die erste Schwachstelle (CVE-2021-44730) ermöglicht einen Angriff durch Hardlink-Manipulation, erfordert jedoch die Deaktivierung des System-Hardlink-Schutzes (Setzen von sysctl fs.protected_hardlinks auf 0). Das Problem wird durch eine falsche Überprüfung des Speicherorts der ausführbaren Dateien der Hilfsprogramme snap-update-ns und snap-discard-ns verursacht, die als Root ausgeführt werden. Der Pfad zu diesen Dateien wurde in der Funktion sc_open_snapd_tool() basierend auf ihrem eigenen Pfad von /proc/self/exe berechnet, was es Ihnen ermöglicht, einen festen Link zu snap-confine in Ihrem Verzeichnis zu erstellen und Ihre eigenen Versionen des snap-confine zu platzieren. Update-ns und Snap-Utilities in diesem Verzeichnis, Discard-ns. Nach der Ausführung über einen Hardlink startet snap-confine mit Root-Rechten die Dateien snap-update-ns und snap-discard-ns aus dem aktuellen Verzeichnis, das vom Angreifer ersetzt wurde.

Die zweite Sicherheitslücke wird durch eine Race Condition verursacht und kann in der Standard-Ubuntu-Desktop-Konfiguration ausgenutzt werden. Damit der Exploit in Ubuntu Server erfolgreich funktioniert, müssen Sie bei der Installation eines der Pakete aus dem Abschnitt „Featured Server Snaps“ auswählen. Die Race-Bedingung wird in der Funktion setup_private_mount() deutlich, die während der Vorbereitung des Mount-Point-Namespace für das Snap-Paket aufgerufen wird. Diese Funktion erstellt ein temporäres Verzeichnis „/tmp/snap.$SNAP_NAME/tmp“ oder verwendet ein vorhandenes, um darin Verzeichnisse für ein Snap-Paket einzubinden.

Da der Name des temporären Verzeichnisses vorhersehbar ist, kann ein Angreifer dessen Inhalt durch einen symbolischen Link ersetzen, nachdem er den Besitzer überprüft hat, aber bevor er den Mount-Systemaufruf aufruft. Sie können beispielsweise einen Symlink „/tmp/snap.lxd/tmp“ im Verzeichnis /tmp/snap.lxd erstellen, der auf ein beliebiges Verzeichnis verweist, und ein Aufruf von mount() folgt dem Symlink und mountet das Verzeichnis im Snap-Namespace. Auf ähnliche Weise können Sie Ihre Inhalte in /var/lib mounten und durch Ersetzen von /var/lib/snapd/mount/snap.snap-store.user-fstab das Mounten Ihres /etc-Verzeichnisses im Namensraum von organisieren Das Snap-Paket zum Organisieren des Ladens Ihrer Bibliothek mit Root-Rechten durch Ersetzen von /etc/ld.so.preload.

Es wird darauf hingewiesen, dass sich die Erstellung eines Exploits als keine triviale Aufgabe erwies, da das Dienstprogramm snap-confine in Go unter Verwendung sicherer Programmiertechniken geschrieben wurde, über einen auf AppArmor-Profilen basierenden Schutz verfügt, Systemaufrufe basierend auf dem Seccomp-Mechanismus filtert und verwendet Der Mount-Namespace zur Isolierung. Die Forscher konnten jedoch einen funktionierenden Exploit vorbereiten, um Root-Rechte auf dem System zu erlangen. Der Exploit-Code wird einige Wochen nach der Installation der bereitgestellten Updates durch Benutzer veröffentlicht.

Source: opennet.ru

Kommentar hinzufügen