Den Pfadüberquerungsfehler im tarfile-Modul von Python verstehen

Veröffentlicht Okt 03, 2022
von Laura Verheyde
FALLSTUDIE

Den Pfadüberquerungsfehler im tarfile-Modul von Python verstehen

Veröffentlicht Okt 03, 2022
von Laura Verheyde
Ressource anzeigen
Ressource anzeigen

Kürzlich gab ein Team von Sicherheitsforschern bekannt, dass sie einen fünfzehn Jahre alten Fehler in der Python-Funktion zur Extraktion von tar-Dateien gefunden haben. Die Schwachstelle wurde erstmals im Jahr 2007 bekannt gegeben und als CVE-2007-4559 verfolgt. Der offiziellen Python-Dokumentation wurde ein Hinweis hinzugefügt, aber der Fehler selbst wurde nicht behoben.

Diese Sicherheitslücke könnte sich auf Tausende von Softwareprojekten auswirken, doch viele Menschen sind mit der Situation nicht vertraut und wissen nicht, wie sie damit umgehen sollen. Aus diesem Grund bieten wir hier bei Secure Code Warriordie Möglichkeit, die Ausnutzung dieser Schwachstelle selbst zu simulieren, um die Auswirkungen aus erster Hand zu erfahren und praktische Erfahrungen mit den Mechanismen dieses hartnäckigen Fehlers zu sammeln, damit Sie Ihre Anwendung besser schützen können!

Probieren Sie die simulierte Mission jetzt aus.

Die Schwachstelle: Pfadüberwindung beim Extrahieren von tar-Dateien

Pfad- oder Verzeichnisüberquerungen treten auf, wenn unüberprüfte Benutzereingaben verwendet werden, um einen Dateipfad zu konstruieren, was es einem Angreifer ermöglicht, Zugriff auf Dateien zu erhalten und diese zu überschreiben und sogar beliebigen Code auszuführen. 

Die Sicherheitslücke besteht im tarfile-Modul von Python. Eine tar-Datei (Bandarchiv) ist eine einzelne Datei, ein sogenanntes Archiv. Sie packt mehrere Dateien mit ihren Metadaten zusammen und ist normalerweise an der Erweiterung .tar.gz oder .tgz zu erkennen. Jedes Mitglied des Archivs kann durch ein TarInfo-Objekt dargestellt werden, das Metadaten wie Dateiname, Änderungszeit, Eigentümer und mehr enthält.

Das Risiko besteht darin, dass die Archive wieder extrahiert werden können.

Beim Extrahieren benötigt jedes Mitglied einen Pfad, in den es geschrieben wird. Dieser Pfad wird erstellt, indem der Basispfad mit dem Dateinamen verbunden wird: 

Schnipsel aus Pythons Tarfile.py


Sobald dieser Pfad erstellt ist, wird er an die Funktion tarfile.extract oder tarfile.extractall Funktionen weitergegeben, um die Extraktion durchzuführen: 

Schnipsel aus Pythons Tarfile.py

Das Problem ist hier die fehlende Bereinigung des Dateinamens. Ein Angreifer könnte Dateien so umbenennen, dass sie Pfad-Traversal-Zeichen enthalten, wie z.B. Punkt-Punkt-Schrägstrich (../), was dazu führen würde, dass die Datei das Verzeichnis verlässt, in dem sie eigentlich sein sollte, und beliebige Dateien überschreibt. Dies könnte schließlich zu einer entfernten Codeausführung führen, die für eine Ausnutzung reif ist. 

Die Schwachstelle tritt auch in anderen Szenarien auf, wenn man weiß, wie sie zu erkennen ist. Neben dem Umgang von Python mit tar-Dateien besteht die Schwachstelle auch bei der Extraktion von zip-Dateien. Vielleicht kennen Sie sie auch unter einem anderen Namen, wie z. B. die Zip-Slip-Schwachstelle, die sich auch in anderen Sprachen als Python manifestiert hat!

LINK ZUR MISSION 

Wie können Sie das Risiko mindern?

Obwohl die Schwachstelle seit Jahren bekannt ist, sind die Python-Betreuer der Ansicht, dass die Extraktionsfunktion genau das tut , was sie tun soll. In diesem Fall mögen manche sagen: "Es ist ein Feature, kein Bug". Leider können Entwickler nicht immer vermeiden, tar- oder zip-Dateien aus einer unbekannten Quelle zu extrahieren. Es liegt an ihnen, die nicht vertrauenswürdigen Eingaben zu bereinigen, um Schwachstellen durch Pfadüberquerung als Teil der sicheren Entwicklungspraktiken zu verhindern.

Möchten Sie mehr darüber erfahren, wie Sie mit Python sicheren Code schreiben und Risiken minimieren können?

Probieren Sie unsere Python-Herausforderung kostenlos aus.

Wenn Sie an weiteren kostenlosen Codierungsrichtlinien interessiert sind, besuchen Sie Secure Code Coach, damit Sie immer auf dem neuesten Stand der sicheren Codierungspraktiken sind.

Ressource anzeigen
Ressource anzeigen

Autor

Laura Verheyde

Laura Verheyde ist Softwareentwicklerin bei Secure Code Warrior und beschäftigt sich mit der Erforschung von Schwachstellen und der Erstellung von Inhalten für Missions und Coding Labs.

Sie wollen mehr?

Tauchen Sie ein in unsere neuesten Erkenntnisse über sichere Kodierung im Blog.

Unsere umfangreiche Ressourcenbibliothek zielt darauf ab, die menschliche Herangehensweise an eine sichere Weiterbildung im Bereich der Programmierung zu stärken.

Blog ansehen
Sie wollen mehr?

Holen Sie sich die neuesten Forschungsergebnisse zur entwicklergesteuerten Sicherheit

Unsere umfangreiche Ressourcenbibliothek ist voll von hilfreichen Ressourcen, von Whitepapers bis hin zu Webinaren, die Ihnen den Einstieg in die entwicklungsorientierte sichere Programmierung erleichtern. Erforschen Sie sie jetzt.

Ressourcendrehscheibe

Den Pfadüberquerungsfehler im tarfile-Modul von Python verstehen

Veröffentlicht Okt 03, 2022
Von Laura Verheyde

Kürzlich gab ein Team von Sicherheitsforschern bekannt, dass sie einen fünfzehn Jahre alten Fehler in der Python-Funktion zur Extraktion von tar-Dateien gefunden haben. Die Schwachstelle wurde erstmals im Jahr 2007 bekannt gegeben und als CVE-2007-4559 verfolgt. Der offiziellen Python-Dokumentation wurde ein Hinweis hinzugefügt, aber der Fehler selbst wurde nicht behoben.

Diese Sicherheitslücke könnte sich auf Tausende von Softwareprojekten auswirken, doch viele Menschen sind mit der Situation nicht vertraut und wissen nicht, wie sie damit umgehen sollen. Aus diesem Grund bieten wir hier bei Secure Code Warriordie Möglichkeit, die Ausnutzung dieser Schwachstelle selbst zu simulieren, um die Auswirkungen aus erster Hand zu erfahren und praktische Erfahrungen mit den Mechanismen dieses hartnäckigen Fehlers zu sammeln, damit Sie Ihre Anwendung besser schützen können!

Probieren Sie die simulierte Mission jetzt aus.

Die Schwachstelle: Pfadüberwindung beim Extrahieren von tar-Dateien

Pfad- oder Verzeichnisüberquerungen treten auf, wenn unüberprüfte Benutzereingaben verwendet werden, um einen Dateipfad zu konstruieren, was es einem Angreifer ermöglicht, Zugriff auf Dateien zu erhalten und diese zu überschreiben und sogar beliebigen Code auszuführen. 

Die Sicherheitslücke besteht im tarfile-Modul von Python. Eine tar-Datei (Bandarchiv) ist eine einzelne Datei, ein sogenanntes Archiv. Sie packt mehrere Dateien mit ihren Metadaten zusammen und ist normalerweise an der Erweiterung .tar.gz oder .tgz zu erkennen. Jedes Mitglied des Archivs kann durch ein TarInfo-Objekt dargestellt werden, das Metadaten wie Dateiname, Änderungszeit, Eigentümer und mehr enthält.

Das Risiko besteht darin, dass die Archive wieder extrahiert werden können.

Beim Extrahieren benötigt jedes Mitglied einen Pfad, in den es geschrieben wird. Dieser Pfad wird erstellt, indem der Basispfad mit dem Dateinamen verbunden wird: 

Schnipsel aus Pythons Tarfile.py


Sobald dieser Pfad erstellt ist, wird er an die Funktion tarfile.extract oder tarfile.extractall Funktionen weitergegeben, um die Extraktion durchzuführen: 

Schnipsel aus Pythons Tarfile.py

Das Problem ist hier die fehlende Bereinigung des Dateinamens. Ein Angreifer könnte Dateien so umbenennen, dass sie Pfad-Traversal-Zeichen enthalten, wie z.B. Punkt-Punkt-Schrägstrich (../), was dazu führen würde, dass die Datei das Verzeichnis verlässt, in dem sie eigentlich sein sollte, und beliebige Dateien überschreibt. Dies könnte schließlich zu einer entfernten Codeausführung führen, die für eine Ausnutzung reif ist. 

Die Schwachstelle tritt auch in anderen Szenarien auf, wenn man weiß, wie sie zu erkennen ist. Neben dem Umgang von Python mit tar-Dateien besteht die Schwachstelle auch bei der Extraktion von zip-Dateien. Vielleicht kennen Sie sie auch unter einem anderen Namen, wie z. B. die Zip-Slip-Schwachstelle, die sich auch in anderen Sprachen als Python manifestiert hat!

LINK ZUR MISSION 

Wie können Sie das Risiko mindern?

Obwohl die Schwachstelle seit Jahren bekannt ist, sind die Python-Betreuer der Ansicht, dass die Extraktionsfunktion genau das tut , was sie tun soll. In diesem Fall mögen manche sagen: "Es ist ein Feature, kein Bug". Leider können Entwickler nicht immer vermeiden, tar- oder zip-Dateien aus einer unbekannten Quelle zu extrahieren. Es liegt an ihnen, die nicht vertrauenswürdigen Eingaben zu bereinigen, um Schwachstellen durch Pfadüberquerung als Teil der sicheren Entwicklungspraktiken zu verhindern.

Möchten Sie mehr darüber erfahren, wie Sie mit Python sicheren Code schreiben und Risiken minimieren können?

Probieren Sie unsere Python-Herausforderung kostenlos aus.

Wenn Sie an weiteren kostenlosen Codierungsrichtlinien interessiert sind, besuchen Sie Secure Code Coach, damit Sie immer auf dem neuesten Stand der sicheren Codierungspraktiken sind.

Wir bitten Sie um Ihre Erlaubnis, Ihnen Informationen über unsere Produkte und/oder verwandte Themen der sicheren Codierung zuzusenden. Wir werden Ihre persönlichen Daten immer mit äußerster Sorgfalt behandeln und sie niemals zu Marketingzwecken an andere Unternehmen verkaufen.

Senden
Um das Formular abzuschicken, aktivieren Sie bitte "Analytics"-Cookies. Sie können die Cookies wieder deaktivieren, sobald Sie fertig sind.