Open Source im professionellen Einsatz

© Andreas Siegel, photocase.com

Insecurity Bulletin: Lokaler Root-Exploit in Calibre

Set-UID-Loch

Die Reihe "Insecurity Bulletin" widmet sich Sicherheitsproblemen in Linux und Open-Source-Software. Dabei dienen aktuelle Schwachstellen als Anschauungsmaterial. In dieser Folge geht es um ein großes Sicherheitsloch, das ein kleines Hilfsprogramm in die E-Book-Anwendung Calibre gerissen hat.

Die E-Book-Software Calibre [1] kann man schon fast als eierlegende Wollmilchsau bezeichnen: Die Open-Source-Anwendung katalogisiert digitale Bücher, konvertiert sie von einem Format in unzählige andere, spielt sie auf Lesegeräte und kann sogar Webinhalte herunterladen und in ein E-Book packen [2].

Offenbar bemüht sich der Calibre-Autor Kovid Goyal so sehr um Features und Bedienungskomfort, dass er die Sicherheit vernachlässigt hat. Das Hilfsprogramm »calibre-mount-helper« , das Nicht-Root-Anwender beim Mounten von E-Book-Readern und USB-Speichern unterstützen soll, wurde Opfer eines lokalen Root-Exploits. Goyal hatte das Programm per Set-UID-Bit mit Rootrechten ausgestattet. Es sollte immer dann zum Einsatz kommen, wenn das lokale Linux-System keinen anderen Mount-Mechanismus für normale User bereitstellt (Abbildung 1).

Abbildung 1: Hinter diesem Menüpunkt verbirgt sich der Mount-Helper mit dem gefährlichen Set-UID-Bit.

Gefährlicher Helfer

Der freiberufliche Entwickler Jason Donenfeld meldete Anfang November 2011 stattliche fünf Sicherheitslücken im Mount-Helper [3] und schrieb zum Beweis gleich passenden Exploit-Code. Die kritischste der fünf angeführten Sicherheitslücken hat zur Folge, dass ein lokaler Angreifer beliebige Befehle mit Rootrechten ausführen darf. Die anderen Schwachstellen erlauben das Erzeugen und Entfernen von Verzeichnissen mit Rootrechten und geben dem Angreifer Kontrolle über das Mount-Kommando.

Grobe Schnitzer

Bei den meisten Schwachstellen handelt es sich um recht grobe Schnitzer in der Programmierung. Beispielsweise reicht der Code Benutzerargumente ungefiltert an Systembefehle wie »mkdir()« weiter, auch Umgebungsvariablen behandelt er unvorsichtig. Zusammen mit der Set-UID-Root-Konfiguration entsteht ein schwerwiegendes Sicherheitsproblem.

Umso verwunderlicher war die Reaktion von Kovid Goyal auf Donenfelds Report. Zunächst sah er die genannten Schwachstellen gar nicht als Problem an und wollte nur für einen der fünf Fehler ein Patch bereitstellen. Nach unzähligen weiteren Postings und nachgebesserten Exploits behob er schließlich auch die anderen Schwachstellen.

Der bemängelte Programmcode von Mount-Helper ist unter [4] zu finden. Jason Donenfeld hebt in seinem Bugreport einzelne Problemstellen hervor. Listing 1 zeigt die Zeilen, mit denen das Programm Verzeichnisse erzeugt. Dabei ist »mp« eine vom Benutzer kontrollierte Zeichenkette. Das Programm enthält keinerlei Prüfung der Benutzereingaben – ein Angreifer kann also nach Belieben Verzeichnisse mit Rootrechten anlegen. Das gleiche Problem tritt beim Löschen auf. Dort lautet der Code schlicht »rmd = rmdir(mp);« und erlaubt einem Angreifer leere Verzeichnisse zu löschen, ebenfalls mit den Berechtigung von Root.

Listing 1

Verzeichnisse anlegen

01 if (!exists(mp)) {
02   if (mkdir(mp, S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) != 0) {
03    errsv = errno;
04   fprintf(stderr, "Failed to create mount point with error: %s\n", strerror(errsv));
05  }
06 }

Daneben legt das Helper-Programm eine versteckte Datei namens ».created_by_calibre_mount_helper« an. Die kann der Anwender mit ein wenig Manipulation an beliebigen Stellen des Verzeichnisbaums platzieren oder löschen.

Außerdem erlaubt das Hilfsprogramm beliebige Argumente für den Mount-Befehl, denn das Einhängen erfolgt einfach via »execlp()« (Listing 2). Auch hier sind »dev« und »mp« benutzerdefinierte Strings, die ein Angreifer ohne Kontrolle durch das Programm vorgeben kann. Das ermöglicht es ihm, das Mount-Kommando mit beliebigen Kommandozeilen-Argumenten zu versorgen.

Listing 2

Mount-Befehl

01 execlp("mount", "mount", "-t","auto", "-o", options, dev, mp, NULL);

Die letzte und schwerste Schwachstelle lässt das Ausführen beliebiger Programme mit Rootrechten zu. Sie hängt eng mit der gerade beschriebenen Implementierung des Mount-Aufrufs zusammen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 2 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook