Pfaddurchlauf

OWASP-Kategorie: MASVS-STORAGE: Speicher

Übersicht

Sicherheitslücken beim Pfaddurchlauf treten auf, wenn ein Angreifer einen Teil des Pfades kontrollieren kann, der dann ohne Validierung an die Dateisystem-APIs übergeben wird. Dies kann zu unbefugten Dateisystem-Vorgängen führen. Ein Angreifer könnte beispielsweise Sonderzeichen wie ../ verwenden, um das Ressourcenziel unerwartet zu ändern, indem er das Zielverzeichnis verlässt.

Positiv beeinflussen

Die Auswirkungen variieren je nach Vorgang und Dateiinhalt, führen aber in der Regel zum Überschreiben von Dateien (beim Schreiben von Dateien), zu Datenlecks (beim Lesen von Dateien) oder zu Berechtigungsänderungen (beim Ändern von Datei- oder Verzeichnisberechtigungen).

Abhilfemaßnahmen

Normalisieren 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 besteht darin, Validierungen durchzuführen, um sicherzustellen, dass nur erwartete Ergebnisse auftreten. Beispiele:

  • Es wird geprüft, ob die Datei bereits vorhanden ist, um ein versehentliches Überschreiben zu verhindern.
  • Prüfen, ob die angegriffene Datei ein erwartetes Ziel ist, um Datenlecks oder eine fehlerhafte Änderung der Berechtigungen zu verhindern
  • Prüfen, ob das aktuelle Verzeichnis des Vorgangs genau mit dem Rückgabewert aus dem kanonischen Pfad übereinstimmt.
  • Das Berechtigungssystem muss explizit auf den Vorgang beschränkt sein. Prüfen Sie beispielsweise, ob Dienste nicht als Root ausgeführt werden, und ob die Verzeichnisberechtigungen auf den angegebenen Dienst oder Befehl beschränkt sind.