Categoria OWASP: MASVS-STORAGE: Storage
Panoramica
Le vulnerabilità di path traversal si verificano quando un malintenzionato può controllare parte del percorso che viene poi passato alle API del file system senza convalida. Ciò può
portare a operazioni non autorizzate sul file system. Ad esempio, un malintenzionato potrebbe utilizzare
caratteri speciali come ../ per modificare in modo imprevisto la destinazione della risorsa, spostandosi
al di fuori della directory di destinazione.
Impatto
L'impatto varia a seconda dell'operazione e del contenuto del file, ma in genere comporta la sovrascrittura di un file (durante la scrittura dei file), la fuga di dati (durante la lettura dei file) o la modifica delle autorizzazioni (durante la modifica delle autorizzazioni di file o 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 che si verifichino solo i risultati previsti. Alcuni esempi sono:
- Controlliamo se il file esiste già per evitare una sovrascrittura accidentale.
- Verifica se il file di destinazione è una destinazione prevista per impedire la perdita di dati o la modifica errata delle autorizzazioni.
- Controllare se la directory corrente dell'operazione è esattamente come previsto nel valore restituito dal percorso canonico.
- Garantire che un sistema di autorizzazioni sia esplicitamente limitato all'operazione, ad esempio verificare che non esegua servizi come root e che le autorizzazioni della directory siano limitate al servizio o al comando specificato.