Attraversamento percorsi

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.