Pfaddurchlauf

OWASP-Kategorie: MASVS-STORAGE: Speicher

Übersicht

Path-Traversal-Schwachstellen treten auf, wenn ein Angreifer einen Teil des Pfads steuern kann, der dann ohne Validierung an die Dateisystem-APIs übergeben wird. Dies kann zu unbefugten Dateisystemvorgängen führen. Ein Angreifer kann beispielsweise Sonderzeichen wie ../ verwenden, um das Ziel der Ressource unerwartet zu ändern, indem er außerhalb des Zielverzeichnisses navigiert.

Auswirkungen

Die Auswirkungen variieren je nach Vorgang und Dateiinhalten, führen aber im Allgemeinen zu einem Überschreiben von Dateien (beim Schreiben von Dateien), zu einem Datenleck (beim Lesen von Dateien) oder zu Berechtigungsänderungen (beim Ändern von Datei- oder Verzeichnisberechtigungen).

Gegenmaßnahmen

Kanonisieren Sie den Pfad mit File.getCanonicalPath() und vergleichen Sie das Präfix mit dem erwarteten Verzeichnis:

Kotlin

@Throws(IllegalArgumentException::class)
fun saferOpenFile(path: String, expectedDir: String?): File {
    val f = File(path)
    val canonicalPath = f.canonicalPath
    require(canonicalPath.startsWith(expectedDir!!))
    return f
}

Java

public File saferOpenFile (String path, String expectedDir) throws IllegalArgumentException {
  File f = new File(path);
  String canonicalPath = f.getCanonicalPath();
  if (!canonicalPath.startsWith(expectedDir)) {
    throw new IllegalArgumentException();
  }
  return f;
}

Eine weitere Best Practice ist die Verwendung der Validierung, um sicherzustellen, dass nur die erwarteten Ergebnisse auftreten. Beispiele:

  • Prüfen, ob die Datei bereits vorhanden ist, um ein versehentliches Überschreiben zu verhindern.
  • Prüfen, ob die Zieldatei das erwartete Ziel ist, um Datenlecks zu verhindern oder Berechtigungen nicht korrekt zu ändern.
  • Prüfen, ob das aktuelle Verzeichnis des Vorgangs genau dem erwarteten Wert im Rückgabewert des kanonischen Pfads entspricht.
  • Sicherstellen, dass ein Berechtigungssystem explizit auf den Vorgang beschränkt ist, z. B. prüfen, ob Dienste nicht als Root ausgeführt werden, und sicherstellen, dass die Verzeichnisberechtigungen auf den angegebenen Dienst oder Befehl beschränkt sind.