Open Source im professionellen Einsatz

Libuser-Bibliothek: Lokaler Root-Exploit

Die libuser-Bibliothekt stellt eine Schnittstelle zum Verwalten von Benutzer- und Gruppenaccounts bereit. Qualys hat kürzlich zwei Schwachstellen in der Bibliothek gefunden, wodurch ein lokaler Angreifer in der Lage ist Denial-of-Service-Attacken auszuführen. Weiter kann ein lokaler Angreifer Befehle mit Root-Rechten ausführen.

Die erste Sicherheitslücke befindet sich in dem Userhelper-Programm. Dieses SetUID-Tool wird verwendet, um bestimmte Benutzerinformationen (wie Passwort, Shell, etc.) zu verändern. Die in Userhelper implementierte »chfn()«-Funktion stellt dabei sicher, dass die vom Anwender gemachten Angaben sinnvoll sind und beispielsweise keine verbotenen Zeichen enthalten. Allerdings filtert »chfn()« keine Newline-Zeichen (»\n«) heraus. Damit kann ein lokaler Angreifer leicht leere Zeilen in die »/etc/passwd« einbauen. Ein Angreifer kann damit eine Denial-of-Service-Attacke durchführen, da eine so bearbeitete »/etc/passwd«-Datei dem System Schwierigkeiten bereitet und der reibungslose Betrieb nicht mehr sichergestellt ist.

Die zweite Schwachstelle betrifft die libuser-Bibliothekt direkt. Programme wie »passwd«, »chfn« und »chsh« arbeiten gewöhnlich nur mit einer temporären Kopie der »/etc/passwd«-Datei. Nachdem alle Modifikationen durchgeführt sind, wird diese temporäre Datei dann via »rename()« in »/etc/passwd« umgewandelt. Die Libuser-Bibliothek macht dies allerdings nicht; sie arbeitet direkt auf »/etc/passwd«. Geht also während des Bearbeitens der Datei etwas schief, so verbleibt die »/etc/passwd«-Datei in einem inkonsistenten Status, was später zu Problemen führen kann.

Die eigentliche Modifkation der »/etc/passwd«-Datei findet in der »generic_mod()«-Funktion der Bibliothek statt. Diese führt folgende Operationen nacheinander aus: »open()«, »fcntl()«, »read()«, »lseek()«, »write()«, »ftruncate()«, »fcntl()«, »close()«. Diese verschiedenen Operationen werden benötigt, um die »/etc/passwd« zu öffnen, zu lesen, und entsprechend zu modifizieren. Qualys hat basierend auf dieser Funktionsabfolge einen lokalen Root-Exploit entwickelt und veröffentlicht. Der Exploit ist recht komplex, aber die grundlegende Idee besteht darin den »write()«-Zugriff auf »/etc/passwd« zu unterbrechen und eigene Zeichen in die Datei einzuschleusen. Das funktioniert nur, weil die Libuser-Schnittstelle direkt auf der Datei und nicht einer Kopie arbeitet. Mit einer solchen Attacke kann sich der Angreifer dann Root-Rechte verschaffen.

Betroffen von diesen Fehlern sind die Versionen vor 0.62.

comments powered by Disqus

Ausgabe 11/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.