Attraversamento percorsi
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Categoria OWASP: MASVS-STORAGE: archiviazione
Panoramica
Le vulnerabilità di traversal del percorso si verificano quando un malintenzionato può controllare parte del percorso che viene poi passato alle API del file system senza convalida. Ciò può causare operazioni non autorizzate del file system. Ad esempio, un malintenzionato potrebbe utilizzare caratteri speciali come ../
per modificare in modo imprevisto la risorsa di destinazione, accedendo a una directory esterna a quella di destinazione.
Impatto
L'impatto varia a seconda dell'operazione e dei contenuti del file, ma in genere porta a una sovrascrittura del file (durante la scrittura dei file), a una fuga di dati (durante la lettura dei file) o a modifiche delle autorizzazioni (durante la modifica delle autorizzazioni dei file o delle directory).
Mitigazioni
Canonicalizza il percorso utilizzando File.getCanonicalPath()
e confronta il prefisso con la directory prevista:
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;
}
Un'altra best practice consiste nell'utilizzare la convalida per garantire solo i risultati previsti. Alcuni esempi sono:
- Controlla se il file esiste già per evitare una sovrascrittura accidentale.
- Verificare se il file di destinazione è un target previsto per evitare la fuga di dati o la modifica errata delle autorizzazioni.
- Controlla se la directory corrente dell'operazione è esattamente come previsto nel valore restituito dal percorso canonico.
- Assicurarsi che un sistema di autorizzazioni sia esplicitamente limitato all'operazione, ad esempio controllare che non stia eseguendo servizi come root e che le autorizzazioni della directory siano limitate al servizio o al comando specificato.
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-26 UTC.
[null,null,["Ultimo aggiornamento 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."]]