Die Gefahren 15 Jahre alter Schwachstellen

Die Entwickler eines handelsüblichen Python-Moduls haben kürzlich herausgefunden, warum alte, nicht gepatchte Sicherheitslücken gefährlich sein können.

Im September 2022 veröffentlichte Trellix einen Bericht über eine Sicherheitslücke im tarfile-Modul, das Teil einer Standardbibliothek für die Programmiersprache Python ist und von jedermann verwendet werden kann. Die Schwachstelle erlaubt es, eine beliebige Datei in einen beliebigen Ordner auf der Festplatte zu schreiben und in einigen Fällen auch Schadcode auszuführen. Was diese Studie so interessant macht, ist die Tatsache, dass das Problem in tarfile bereits im August 2007 entdeckt wurde – also vor etwas mehr als 15 Jahren! Damals wurde ihm jedoch keine Aufmerksamkeit geschenkt. Wir wollen herausfinden, warum das so war und welche Probleme sich für Python-Entwickler und ihre Benutzer daraus ergeben könnten.

Mehr über tarfile

Tarfile enthält Code zum Umgang mit tar-Archiven. Dieses Format ist in Unix-ähnlichen Betriebssystemen weit verbreitet und stammt aus dem Jahr 1979. Mit tar lassen sich große Mengen von Dateien und Ordnern leicht packen. Ursprünglich wurde es zum Schreiben von Backups auf Magnetband verwendet. Heutzutage können tar-Archive eine Dateikomprimierung verwenden, die jedoch optional ist. Tarfile ist für die Erstellung und Dekomprimierung solcher Archive zuständig und wird von Python-Entwicklern als Standardwerkzeug für solche Aufgaben verwendet.

Die Sicherheitslücke in tarfile ist recht simpel und wurde im ursprünglichen Fehlerbericht vom August 2007 ausführlich beschrieben. Dabei handelt es sich nicht einmal um eine Schwachstelle im eigentlichen Sinne, sondern nur darum, dass tarfile beim Entpacken die exakte Ordnerstruktur wiederherstellt, die beim Entpacken im Archiv enthalten ist. Dies gilt auch für Fälle, in denen der Dateiname im Archiv folgende Struktur hat: „../../../../etc/passwd“. Wenn ein solches Archiv als Systemadministrator entpackt wird, wird die Datei passwd nicht in das Verzeichnis geschrieben, in dem sich das Archiv selbst befindet. Beim Durchlaufen der /../-Elemente im Pfad erreicht der Entpacker zunächst das Stammverzeichnis und überschreibt dann die passwd-Datei im /etc-Verzeichnis. Unter Linux bedeutet dies, dass die reguläre Datei mit den Daten aller Systembenutzer gelöscht wird.

Die Gefahr dabei ist, dass Benutzer von Programmen, die das tarfile-Modul verwenden, nicht wissen, wie das normale Entpacken eines Archivs endet. Entweder es passiert nichts oder Dateien erscheinen plötzlich an unerwarteten Stellen. Außerdem können einige benutzerdefinierte Dateien überschrieben werden. Die Autoren des Fehlerberichts verweisen auf genau dieses Problem in der tar-Archivierungssoftware selbst, das bereits 2001, also vor mehr als 20 Jahren, behoben wurde. Allerdings wurde die Sicherheitslücke in tarfile nie geschlossen.

Jahrelanges Warten

Nach einer Diskussion über den potenziellen Bug im Jahr 2007 wurde letztendlich beschlossen, nichts zu unternehmen, und zwar aus zwei Gründen. Erstens ist eine solche Dateiverarbeitung in voller Übereinstimmung mit dem Unix-POSIX-Standard (wir können das bestätigen). Zweitens „gibt es in der Praxis keine Exploit-Möglichkeit“. Eine Warnung im Benutzerhandbuch, dass es nicht ratsam ist, Dateien aus nicht vertrauenswürdigen Quellen mit tarfile zu entpacken, wurde als ausreichend angesehen.

Diese Einschätzung wurde 2022 widerlegt, als Trellix zeigte, dass ein Exploit in der Praxis mehr als möglich ist. Und zwar nicht nur, um Daten an beliebige Stellen zu schreiben, sondern auch, um beliebigen Code auszuführen. Bedenken Sie erneut, dass es sich hierbei um eine Bibliothek für Programmierer handelt, d. h. die Möglichkeit eines Angriffs hängt von der spezifischen Software ab, in der das tarfile-Modul verwendet wird. Trellix nannte zwei Beispiele.

Teil des verwundbaren Codes in Universal Radio Hacker. Quelle.

 

Das erste ist Universal Radio Hacker, ein Programm zur Analyse von unbekannten Funkprotokollen. Das Programm speichert Daten als ein Projekt, das aus mehreren tar-komprimierten Dateien besteht. Die Forscher haben nachgewiesen, dass eine ausführbare Datei in das Windows-Auto-Run-Verzeichnis geschrieben wird, wenn versucht wird, das vorgefertigte komprimierte Archiv zu öffnen. Beim nächsten Neustart des Systems wird dieser Code dann ausgeführt. Diese Schwachstelle kann u.a. auf verschiedenen Plattformen ausgenutzt werden.

Das zweite Beispiel, das im Video gezeigt wird, ist etwas komplexer: Die Entwicklungsumgebung Spyder IDE speichert Daten in einem tar-Archiv. Beim Importieren dieser Daten wiederholten die Forscher zunächst das Experiment, die Datei in das System zu integrieren, taten dann aber etwas noch Cooleres: Sie programmierten beliebigen Code, der beim nächsten Start von Spyder ausgeführt werden sollte. Das Endergebnis dieses Experiments war eine Anfrage zur Ausführung von beliebigem Code, dieses Mal aber mit Systemadministrator-Rechten.

Unvorhersehbare Konsequenzen

Die Geschichte des 15 Jahre alten Bugs zeigt einmal mehr, dass man Schwachstellen, die das beliebige Schreiben von Daten ermöglichen, niemals unterschätzen sollte – selbst wenn dies nach Vorschrift geschieht und die Exploit-Möglichkeiten nicht offensichtlich sind.

Tarfile ist Teil der Standard-Python-Bibliothek und ist in fast allen Linux-basierten Systemen (neben anderen) enthalten. Die Gefahr liegt jedoch in der Verwendung einer bestimmten anfälligen Funktion. Im Allgemeinen ist jedes in Python entwickelte Projekt, das ein tarfile-Modul verwendet, aus sicherheitstechnischer Sicht anfällig. Aus der Sicht des Endnutzers ist dies eine heikle Situation, da er möglicherweise ein potenziell gefährdetes Programm ausführt und nicht weiß, dass es tar verwendet. Kaspersky-Experten empfehlen daher Folgendes:

  • die Verarbeitung von Dateien aus nicht vertrauenswürdigen Quellen einschränken;
  • Programme von Drittanbietern mit minimalen Rechten auszuführen, um die Angriffsmöglichkeiten zu reduzieren;
  • Die auf wichtigen Systemen eingesetzte Software zu überprüfen, um möglicherweise anfällige Funktionen zu identifizieren.

Für Entwickler ist dieses Problem ein Grund, ihren eigenen Code zu überprüfen, um verwundbare Funktionen ausfindig zu machen und dementsprechend anzupassen.

Tipps