Pfaddurchlauf
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
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.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-26 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-07-26 (UTC)."],[],[],null,["# Path traversal\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-STORAGE: Storage](https://mas.owasp.org/MASVS/05-MASVS-STORAGE)\n\nOverview\n--------\n\nPath traversal vulnerabilities occur when an attacker can control part of the\npath that is then passed to the file system APIs without validation. This can\nlead to unauthorized file system operations. For example, an attacker might use\nspecial characters such as `../` to unexpectedly change the resource target, by\ntraversing outside of the targeted directory.\n\nImpact\n------\n\nThe impact varies depending on the operation and file content, but generally\nleads to a file overwrite (when writing files), data leak (when reading files),\nor permission changes (when changing file or directory permissions).\n\nMitigations\n-----------\n\nCanonicalize the path using [`File.getCanonicalPath()`](/reference/java/io/File#getCanonicalPath()) and compare the\nprefix with the expected directory: \n\n### Kotlin\n\n @Throws(IllegalArgumentException::class)\n fun saferOpenFile(path: String, expectedDir: String?): File {\n val f = File(path)\n val canonicalPath = f.canonicalPath\n require(canonicalPath.startsWith(expectedDir!!))\n return f\n }\n\n### Java\n\n public File saferOpenFile (String path, String expectedDir) throws IllegalArgumentException {\n File f = new File(path);\n String canonicalPath = f.getCanonicalPath();\n if (!canonicalPath.startsWith(expectedDir)) {\n throw new IllegalArgumentException();\n }\n return f;\n }\n\nAn additional best practice is to use validation to ensure only expected\noutcomes occur. Examples include the following:\n\n- Checking if the file already exists to prevent an accidental overwrite.\n- Checking if the targeted file is an expected target to prevent leaking data or incorrectly changing permissions.\n- Checking if the current directory of the operation is exactly as expected in the return value from the canonical path.\n- Ensuring a permissions system is explicitly scoped to the operation, such as checking that it isn't running services as root, and ensuring that the directory permissions are scoped to the service or command specified."]]