Menü
Alert!
Security

Dirty Sock: Canonical schließt Sicherheitslücke in Paketverwaltung Snap

Eine Sicherheitslücke in Canonicals Paketverwaltung Snap ermöglichte normalen Benutzern Root-Rechte. Eine abgesicherte Version ist mittlerweile verfügbar.

Von
vorlesen Drucken Kommentare lesen 13 Beiträge
Dark Socket: Canonicals schließt Sicherheitslücke in Paketverwaltung Snap

Das Skript Dirty Sock erschleicht sich über ein speziell benanntes Unix-Socket Root-Rechte.

(Bild: Screenshot)

Ein klassischer Programmierfehler ermöglichte angemeldeten Nutzern ohne besondere Privilegien, Root-Rechte zu erschleichen. Betroffen ist der Hintergrunddienst der Linux-Paketverwaltung Snap in den Versionen von 2.28 bis 2.37.0. Snap ist standardmäßig unter Ubuntu installiert, aber auch für alle gängigen Linux-Distributionen verfügbar. Das Snap-Entwicklerteam hat umgehend eine korrigierte Version veröffentlicht.

Die Sicherheitslücke befand sich in der REST-Schnittstelle von snapd, erläutert der australische Sicherheitsforscher Chris Moberly auf Launchpad ausführlich. Durch eine gezielte Manipulation ließ sich vortäuschen, der Benutzer sei root, wodurch Snap auch privilegierte Befehle wie Account-Erstellung oder App-Installation akzeptierte. Der Patch ist im Github-Repository der Snap-Entwickler verfügbar.

Die Snap-Entwickler reagierten nach Moberlys vertraulicher Meldung zügig und korrigierten die Abfrage der Benutzerkennung. Die Lücke wurde in snapd ab Version 2.37.1 geschlossen. Die Sicherheitsupdates sind für alle gängigen Distributionen verfügbar. Anwender, die Snap installiert haben oder Ubuntu verwenden, sollten die Betriebssystem-Updates einspielen.

Eine Ausnutzung der Schwachstelle durch Angreifer ist nicht bekannt.

Snap erzeugt beim Start des Hintergrunddienstes snapd einen Unix-Socket, auf dem ein abgespeckter Webserver auf Befehle per HTTP für die REST-Schnittstelle wartet. Die REST-API von Snap akzeptiert auch Befehle zum Anlegen neuer Benutzerkonten oder zur Installation von Paketen. Diese prüft zwar die Benutzerkennung (UID), aber bei der Quelltext-Analyse fand Moberly dort einen gravierenden Fehler. Den Proof of Concept zur Sicherheitslücke (CVE-2019-7304) nannte der Sicherheitsforscher "Dirty Sock".

Jeder Aufruf der Schnittstelle erzeugt eine Zeichenkette mit Prozesskennung, Benutzerkennung sowie Ziel- und Ursprungsadresse. Die Ursprungsadresse besteht üblicherweise nur aus einem "@", da der Zugriff nicht mittels IP, sondern über das Unix-Socket läuft. Diese Zeichenkette wird bei der Prüfung anhand eines Semikolons als Trennzeichen unterteilt und durch eine Schleife abgearbeitet. Dabei wird nach der Zeichenkette "uid=<Nummer>" gesucht und die gefundene Zahl in eine Variable geschrieben.

Die Zeichenkette aus der letzten Zeile wird zur Prüfung der Benutzerrechte verwendet.

(Bild: Screenshot, Chris Moberly)

Moberly jubelte hier eine zweite falsche UID unter, indem er einen weiteren Unix-Socket dazwischen schaltete. Dieser hat einen Namen wie "/tmp/sock;uid=0;". Dadurch wird das @-Zeichen am Ende der Zeichenkette durch den Socket-Namen ersetzt. Da aufgrund des Programmierfehlers die Schleife nochmal eine "UID" fand, gelangte eine "0" für den Systembenutzer root in die Variable für die Benutzerkennung.

Im Debugger erscheint in der Zeichenkette zweimal eine "uid". Letztere stammt aus dem untergeschobenen Socket-Namen.

(Bild: Screenshot, Chris Moberly)

In einem ersten Ansatz nutzte Moberly die erschlichenen Systemadministrator-Rechte, um ein neues Benutzerkonto mit sudo-Rechten zu erstellen und dort einen SSH-Key aus Ubuntus Snap-Entwicklerportal zu hinterlegen. Den SSH-Key hatte er zuvor in das Entwicklerportal hochgeladen. Dieses ist für jeden ohne weitere Hürden möglich. Über eine lokale SSH-Verbindung und sudo war so eine Shell mit Root-Rechten zugänglich.

In seinem zweiten Ansatz nutzte er die gleiche Lücke, aber verzichtete auf den Umweg über SSH. Dazu erzeugte er ein Snap-Paket, welches nur ein Installationsskript enthielt. Dieses legt ebenfalls ein neues Benutzerkonto mit sudo-Rechten an, welches die Kontrolle über das gesamte System ermöglichen würde.

Heise Security konnte den Angriff auf Ubuntu 18.04 LTS reproduzieren und auch auf Linux Mint 19.1, wobei hier zuvor Snap installiert werden musste.

Der erfolgreiche Angriff in einer Live-Session von KDE Neon, welches auf Ubuntu basiert.

(Bild: Screenshot)

Andere Meldungen verwiesen darauf, dass dieses Paket mit Entwicklermodus (devmode) markiert sei und der zweite Angriff so die Prüfung von Signaturen und anderen Sicherheitsvorkehrungen in Canonicals Paketverwaltung Snap umgehe. "Wir benötigen den Fehler, um mit root-Rechten das Snap-Paket zu installieren", betont Chris Moberly auf Nachfrage von Heise Security: "Der Angriff versteckt sich nicht hinter einem schädlichen Paket." Die Tests von Heise Security bestätigen, dass das Snap-Paket nur mit root-Rechten funktioniert. Diese werden durch die von Moberly entdeckte Lücke erschlichen.

Für jeden, der mehr darüber erfahren möchte, wie eine Sicherheitslücke gefunden und ausgenutzt wird, sind Chris Moberlys Erläuterungen lesenswert. Der Sicherheitsforscher schildert ausführlich und verständlich seine Analyse, den Angriff und wie er das manipulierte Snap-Paket erstellt hat. (ktn)