Path Traversal: Risiken und Schutzmaßnahmen
Autor: Redaktion Domeny.ForSale Veröffentlicht
Kurz erklärt: Path Traversal ist eine Sicherheitslücke, durch die eine Anwendung den Zugriff auf Dateien außerhalb des für die jeweilige Anfrage vorgesehenen Verzeichnisses erlaubt. Meist wird damit das Lesen fremder Dateien verbunden. Bei Schreib- oder Löschfunktionen kann die Lücke aber auch das Ändern oder Löschen dieser Dateien ermöglichen. Das Problem entsteht, wenn die Anwendung Benutzereingaben als Teil eines Dateipfads behandelt und nicht zuverlässig prüft, wohin dieser Pfad führt.
Was es bedeutet, ein Verzeichnis zu verlassen
Ein Pfad ist die Adresse einer Datei im Dateisystem, zum Beispiel /srv/anwendung/dokumente/anleitung.pdf. Eine Anwendung, die Dokumente bereitstellt, sollte ausschließlich das Herunterladen von Dateien aus einem festgelegten Verzeichnis erlauben, nicht den Zugriff auf beliebige Dateien auf dem Server.
Path Traversal, auch directory traversal oder dot-dot-slash genannt, bezeichnet das Überschreiten dieser Grenze. Der Name dot-dot-slash bezieht sich auf die Schreibweise ../: Die beiden Punkte stehen für das übergeordnete Verzeichnis, der Schrägstrich trennt die Bestandteile des Pfads. Entsprechend eingesetzt kann diese Zeichenfolge eine Dateioperation also aus dem erlaubten Ordner herausführen.
Das lässt sich mit einem Schalter für die Dokumentenausgabe vergleichen. Der Kunde sollte eine Dokumentennummer nennen, woraufhin der Mitarbeiter das Dokument aus dem richtigen Schrank holt. Der Fehler entsteht, wenn der Mitarbeiter statt einer Nummer eine Anweisung akzeptiert: „Verlasse diesen Schrank, gehe in den Nebenraum und hole die angegebene Datei.“
Beispiel: Ein Dokument anhand seines Namens herunterladen
Angenommen, eine Anwendung speichert öffentliche Dokumente im Verzeichnis /srv/anwendung/dokumente/. Der Benutzer wählt eine Datei aus, und der Browser sendet eine Anfrage:
/herunterladen?datei=anleitung.pdf
Hängt das Programm den Wert des Parameters datei ungeprüft an den Pfad des Dokumentenverzeichnisses an, entsteht der Pfad /srv/anwendung/dokumente/anleitung.pdf. Bei einem gewöhnlichen Dateinamen sieht das korrekt aus. Das Problem zeigt sich, sobald der übergebene Wert einen Wechsel in das übergeordnete Verzeichnis enthält:
/herunterladen?datei=../konfiguracja.env
Der zusammengesetzte Pfad /srv/anwendung/dokumente/../konfiguracja.env verweist auf /srv/anwendung/konfiguracja.env, also auf eine Datei außerhalb des Dokumentenverzeichnisses. Kann die Anwendung diese Datei lesen und gibt sie deren Inhalt zurück, werden Daten offengelegt.
Das Beispiel veranschaulicht den Mechanismus, garantiert aber keinen erfolgreichen Angriff. Die Datei muss existieren, der Anwendungsprozess muss Zugriff darauf haben, und die Verarbeitung der Anfrage muss es ermöglichen, den angegebenen Pfad zu nutzen. Ein solches Verhalten darf nur in der eigenen Umgebung oder mit ausdrücklicher Erlaubnis für die Tests geprüft werden.
Welche Schäden Path Traversal verursachen kann
Die Folgen hängen vor allem davon ab, welche Operation die anfällige Funktion ausführt und welche Berechtigungen die Anwendung im Betriebssystem besitzt.
- Lesen von Dateien: Eine Downloadfunktion kann Konfigurationen, Benutzerdaten, Sicherungskopien oder Zugangsdaten offenlegen.
- Schreiben und Überschreiben: Eine anfällige Schreibfunktion kann eine Datei außerhalb des Zielverzeichnisses ablegen oder eine vorhandene Datei verändern.
- Löschen: Eine Löschfunktion kann Dateien entfernen, die der Benutzer gar nicht als Ziel auswählen können sollte.
Unter bestimmten Bedingungen kann das Überschreiben einer Konfiguration oder das Ablegen einer vom Server ausgeführten Datei zu einer weitergehenden Übernahme der Anwendung führen. Path Traversal bedeutet jedoch nicht automatisch, dass sich Code ausführen lässt oder vollständiger Zugriff auf den Server besteht. Die Möglichkeiten werden unter anderem durch die Berechtigungen des Prozesses und die verfügbaren Funktionen der Anwendung begrenzt.
Die Lücke betrifft nicht nur Adressen, die im Browser sichtbar sind. Daten, die den Pfad beeinflussen, können auch aus einem Formular, einer API-Anfrage, dem Namen einer hochgeladenen Datei oder einem Eintrag in einem Archiv stammen, das gerade entpackt wird.
Wie sich das Risiko wirksam begrenzen lässt
Am sichersten ist es, den Benutzer gar keinen Pfad angeben zu lassen. Statt einen Dateinamen oder Speicherort entgegenzunehmen, kann die Anwendung eine Dokumentenkennung akzeptieren, zum Beispiel 482, und die zugehörige Datei selbst ermitteln. Dabei muss sie prüfen, ob der jeweilige Benutzer die Datei herunterladen darf — die Kennung allein bietet keinen Schutz.
Wenn die Annahme von Pfaden erforderlich ist, sollten die Schutzmaßnahmen mehrere Aspekte abdecken:
- Streng begrenzte Eingaben. Benötigt eine Funktion nur einen Dateinamen, sollte sie keinen vollständigen Pfad akzeptieren. Zulässige Namen und Dateiendungen sind auf das tatsächlich Erforderliche zu beschränken.
- Prüfung des endgültigen Speicherorts. Unter Berücksichtigung der Regeln des Dateisystems sollte die Anwendung sicherstellen, dass sich das Ziel weiterhin innerhalb des erlaubten Verzeichnisses befindet. Dafür sind geeignete Funktionen zur Pfadverarbeitung zu verwenden, nicht bloß Vergleiche der Zeichenfolgen am Pfadanfang.
- Berücksichtigung symbolischer Links. Ein symbolischer Link verweist auf eine andere Stelle im Dateisystem. Eine Datei, die scheinbar im erlaubten Ordner liegt, kann über einen solchen Verweis tatsächlich außerhalb davon liegen.
- Minimale Berechtigungen. Der Prozess, der Dokumente bereitstellt, sollte weder auf unnötige Daten zugreifen können noch Schreibrechte besitzen, wo Leserechte genügen.
Die Zeichenfolge ../ einfach zu entfernen, bietet keinen ausreichenden Schutz. Unterschiede bei Trennzeichen, Kodierung und Verarbeitungsreihenfolge können dazu führen, dass Filter und Dateisystem denselben Wert unterschiedlich interpretieren. Die Prüfung muss berücksichtigen, wie die Anwendung die Datei tatsächlich öffnet.
Wo Sie mit der Prüfung der Anwendung beginnen sollten
Prüfen Sie die Funktionen zum Herunterladen, Hochladen, Löschen und Entpacken von Dateien. Klären Sie für jede Funktion, ob der Benutzer den Pfad beeinflussen kann, welches Verzeichnis erlaubt ist und ob das Programm das endgültige Ziel der Operation prüft. Die Tests sollten sowohl Versuche umfassen, das erlaubte Verzeichnis zu verlassen, als auch gewöhnliche, gültige Anfragen.
Wenn Sie vermuten, dass die Lücke ausgenutzt wurde, reicht eine Korrektur des Codes möglicherweise nicht aus. Sie müssen beurteilen, welche Dateien zugänglich waren, die Protokolle prüfen und — falls Zugangsdaten offengelegt worden sein könnten — die entsprechenden Passwörter oder Schlüssel austauschen. Der erste praktische Schritt besteht darin, die konkrete Stelle zu finden, an der Benutzereingaben zu einem Dateipfad werden.
Siehe auch: Was ist Apache?
