Indietro

ⓘ Directory traversal attack




Directory traversal attack
                                     

ⓘ Directory traversal attack

Un attacco informatico directory traversal consiste nello sfruttare uninsufficiente validazione di sicurezza o una scarsa sanificazione dellinput di nomi di file forniti dallutente, come i caratteri speciali utilizzati per "raggiungere la cartella padre che vengono passati alle API dei file a livello web server. Questo significa fare exploit dellinput.

Lexploit HTTP che si effettua quando si vuole realizzare questo tipo di attacco, permette allattaccante di poter accedere a direttori ad accesso ristretto accessibili solo con determinati privilegi ed eseguire comandi allesterno della web directory o della working directory CWD. Lesecuzione di questi comandi porta allaccesso malevole di alcuni file localizzati sul server remoto.

Lobiettivo dell’attacco è utilizzare unapplicazione specifica per poter guadagnare, in modo non autorizzato, i privilegi di accesso al file system. Questo attacco sfrutta un buco di sicurezza invece di sfruttare un bug nel codice il software si comporta esattamente come ci si aspetta. Sfruttando la vulnerabilità allattacco Directory traversal è possibile raggiungere dei dati al di fuori della root directory, come il file shadow delle password o altri file contenenti dati importanti per scatenare un attacco contro il sistema vulnerabile.

Directory traversal è anche conosciuto come attacco./ dot slash, directory climbing e backtracking. Alcune forme di questo attacco sono anche dette attacchi in forma canonica, normale o standard.

                                     

1. Conseguenze comuni dellattacco

La seguente tabella riporta l area di sicurezza dellapplicazione che è stata violata e l impatto che descrive i problemi tecnici che possono nascere se lattaccante sfrutta la vulnerabilità dellapplicazione attaccata.

                                     

2. Esempio

Un esempio tipico di applicazione vulnerabile in PHP è:

Un attacco contro questo sistema consiste nellinviare la seguente richiesta HTTP:

Generando la seguente risposta ottenuta dal server:

I caratteri./ ripetuti dopo il percorso /home/users/phpguru/templates/ permettono alla funzione include di saltare direttamente alla root directory, e successivamente di includere nel percorso il file delle password di Unix, /etc/passwd. Non cè un numero prestabilito di caratteri./ poiché, più se ne mettono e più è alta la probabilità di raggiungere la cartella home dellapplicazione web.

Il file Unix /etc/passwd è un comune file usato per dimostrare il directory traversal, poiché è spesso usato dai crackers per provare a craccare le password che contiene o meglio conteneva.

Tuttavia, nei sistemi Unix più recenti, il file passwd non contiene più gli hash delle password. Sono invece salvate nel shadow file che non può essere letto dagli utenti che non possiedono i sufficienti privilegi sulla macchina. Il file passwd è comunque ancora utilizzato per lenumerazione degli account sulla macchina users, infatti mostra gli account degli utenti del sistema.

                                     

3. Le varianti dellattacco directory traversal

La seguente lista mostra alcune delle stringhe utilizzate per lattacco directory traversal:

Directory traversal in ambiente Unix

Comunemente nei sistemi Unix-like per effettuare lattacco si utilizzano i caratteri./.

                                     

3.1. Le varianti dellattacco directory traversal Directory traversal in ambiente Unix

Comunemente nei sistemi Unix-like per effettuare lattacco si utilizzano i caratteri./.

                                     

3.2. Le varianti dellattacco directory traversal Directory traversal in ambiente Microsoft Windows

Nei sistemi Microsoft Windows e DOS per effettuare lattacco si utilizzano le sequenze di caratteri.\ o./.

Ogni partizione del disco ha una root directory separata da quella della delle altre partizioni per esempio chiamata C:\ per una partizione del disco C e non esiste una root directory comune a tutte le partizioni.

Questo tipo di attacco è causa delle numerose vulnerabilità che affliggono lambiente Microsoft.

                                     

3.3. Le varianti dellattacco directory traversal Unicode / UTF-8 encoded directory traversal

Appartiene alla famiglia dei canonicalization problems detti anche problemi della forma canonica, normale o standard.

Bruce Schneier e Jeffrey Streifling classificano la codifica UTF-8 come una fonte di vulnerabilità e vettore di attacco.

Quando Microsoft abbracciò il supporto a Unicode per i suoi Web server, introdusse una nuova modalità di codifica./ nel sorgente, causando uno scavalcamento dei sistemi di prevenzione agli attacchi directory traversal.

Sono chiamati Multiple percent encodings e sono di seguito riportati:

  • %c1%1c
  • %c0%af

Rispettivamente tradotti nei caratteri / o \.

I percent encodings erano decodificati dal web server di Microsoft nei corrispondenti 8-bit di caratteri. Questo, storicamente ha permesso di cambiare il comportamento adottato da Windows e DOS che tradizionalmente usava la forma canonica degli 8-bit di caratteri basata sulla codifica ASCII.

Tuttavia, la forma originaria di UTF-8 non era canonica, e parecchie stringhe codificate risultano traducibili nella stessa stringa. Microsoft sviluppò il sistema di verifica anti-traversal senza impiegare UTF-8 in forma canonica, e dunque senza rendere noto che quegli HEX C0AF e HEX 2F, sopra elencati, risultavano essere lo stesso carattere quando si effettuava il controllo sulle stringhe. Un percent encodings malformato, come %c0%9v risultava comunque utilizzabile.



                                     

3.4. Le varianti dellattacco directory traversal Zip/Archive traversal attacks

Lutilizzo dei file archivio, come il formato zip, facilitano gli attacchi directory traversal: i file nellarchivio possono essere creati in modo da sovrascrivere i file del file system in backtracking. Il codice che decomprime larchivio può essere scritto per verificare che il percorso dei file nellarchivio non dia inizio al path traversal.

                                     

4. Possibili metodi per la prevenzione del directory traversal

Un possibile algoritmo per prevenire il directory traversal potrebbe essere:

  • Processare le request URI che non risultano nella richiesta di un file al server, e.g.: eseguendo un hook intercettare le chiamate alle funzioni nel sorgete, prima di continuare di seguito.
  • Assicurarsi che i primi N caratteri del percorso completo del file richiesto siano esattamente quelli del percorso di Document Root.
  • Usando una codifica fissa hard coded predefinita per lestensione del file da appendere al path, non limita comunque lo scopo dellattacco ai file aventi quellestensione.
  • Si assume ora che sia noto, completo, normalizzato e conosciuto il percorso della cartella Document Root e che la lunghezza della stringa associata al path sia lunga N. Assumendo inoltre che nessun file al di fuori della cartella possa essere servito.
  • In caso affermativo, far restituire il file.
  • In caso non affermativo, restituire un errore, dato che la richiesta è chiaramente fuori dal range di ciò che il web server dovrebbe essere autorizzato a servire.
  • Quando viene effettuata una richiesta URI per un file o una cartella, costruire il path completo di quel file o cartella se esiste, normalizzare tutti i caratteri e.g.: convertire tutti i caratteri %20 in spazi.

Lutente può usare il carattere \0 NULL, indicando la fine della stringa dopo la variabile $_GET di php bypassando così tutto ciò che si trova dopo la variabile stessa.



                                     

5. Come identificare se si è vulnerabili

  • Non salvare file contenenti informazioni sensibili allinterno della cartella principale dellapplicazione web;
  • Per i server Windows IIS, la cartella principale dellapplicazione web non dovrebbe trovarsi nella partizione di sistema, per evitare che venga propagato ricorsivamente lattacco anche alle cartelle di sistema.
  • Accertarsi che i nomi dei file passati al sistema operativo del web server vengano processati nella maniera esatta;
                                     

6. Come proteggersi

  • Utilizzare gli indici anziché utilizzare le porzioni effettive dei nomi dei file direttamente allinterno del codice;
  • Assicurarsi che lutente non possa fornite tutte le parti del path, ma circondarlo con il proprio path code;
  • Quando si utilizzano delle chiamate al file system, evitare di lavorare con variabili che contengono linput dellutente;
  • Se non si può evitare di usare variabili che contengono linput dellutente nella stessa porzione di codice dove si effettuano operazioni sul file system, normalizzare linput prima di usarlo nei file di interfaccia alle APIs come la funzione normalize di Java.
  • Validare linput dellutente solamente se si tratta di qualcosa di ben conosciuto, non ripulirlo dai metacaratteri ma eliminarlo;
  • Usare le chroot jails le politiche di accesso al codice per restringere gli accessi dove i file possono essere ottenuti o salvati;
                                     

7. Risorse

  • Nozioni su directory traversal attack - HackTips
  • The WASC Threat Classification – Path Traversal
  • Open Web Application Security Project
  • Directory Traversal - Hackers Tribe
  • File System - OWASP path traversal
  • CWE-22: Improper Limitation of a Pathname to a Restricted Directory Path Traversal