path trasversal

Sommario degli argomenti

Path trasversal

I software che utilizziamo ogni giorno, anche quelli web-based, sono organizzati in alberi di file.

Si originano da una cartella genitore chiamata root e si diramano in molteplici cartelle e file. Talvolta, addirittura, le applicazioni web utilizzano dei parametri dell’URL (acronimo per Universal Resource Locator) per gestire file e funzionalità utili per l’esecuzione del programma.

Gli attacchi di tipo Path Traversal avvengono quando una vulnerabilità consente di navigare l’albero dei file dell’applicazione per mezzo di pochi e semplici comandi passati tramite URL. Risvolto immediato di questa attività è l’accesso a file nascosti che contengono importanti informazioni sul sistema.

Sebbene i moderni server adottino delle procedure di protezione di default contro questi attacchi, vedremo che è sempre bene tenere alta la guardia ed interiorizzare delle best practice per evitare danni e interruzioni di servizio.

Path Traversal: il primo passo verso File Inclusion

I server che ospitano le applicazioni web-based sono macchine simili ai computer domestici; anzi a volte i personal computer sono i primi server che una startup di studenti squattrinati ha a disposizione agli albori della loro impresa, come da migliore tradizione statunitense.

Perciò, anche i server adottano lo standard di navigazione delle directory, che consiste in “/” (forward slash) che accompagnano i nomi delle cartelle.

Purtroppo, anche questo aspetto può rappresentare una vulnerabilità che può essere sfruttata per condurre un’intera categoria di attacchi informatici.
Nello specifico, si parla di attacco Path Traversal e questa minaccia indica un attaccante che ricorre a comuni stringhe di navigazione per accedere a file nascosti in un sistema.

Ne consegue una violazione non da poco, dove possono essere raggiunti e trafugati dati importanti su utenti e sul sistema stesso: dati che potrebbero anche essere impiegati per realizzare attacchi più complessi e strutturati.

Il sistema vulnerabile si identifica con quel sistema che non implementa delle corrette funzioni di validazione degli input, in questo caso riferiti all’ambiente dell’URL. Infatti, spesso si richiamano dei file presenti nella cartella di root dell’applicazione per ottenere delle funzionalità o dei componenti da presentare nell’interfaccia utente. Questo ‘richiamo’ avviene appoggiandosi all’url, modificato dall’interazione dell’utente con l’interfaccia, ad esempio cliccando su delle icone.

Ebbene, se i valori passati dai parametri dell’url, che sono facilmente modificabili dall’utente, non sono validati a dovere, ci si espone alla possibilità di subire un attacco Path Traversal. L’attaccante può inserire alcune stringhe nel’URL ed accedere a file sensibili.

Tipicamente, la stringa “../” viene universalmente riconosciuta come escape; con questa si può risalire l’albero dei file. Per la precisione “../” serve ad uscire da una cartella, tornando alla cartella genitore.

Dunque, l’URL ha una forma del genere:

[indirizzo]/section?pagina=file1.php

dove l’estensione del file è puramente a titolo di esempio, vale anche per altri linguaggi di scripting server side con le loro rispettive peculiarità.

L’URL presentato ha un parametro pagina al quale è associato un valore file1.php . Se tutto proseguisse secondo il normale flusso delle operazioni, tale valore sarebbe ritrovato nell’albero dei file dell’applicazione e fornirebbe dati o funzionalità alla pagina corrente.

Cosa accadrebbe se un attaccante inserisse un valore differente?

Se non sono implementate funzioni di sicurezza adeguate, nella migliore delle ipotesi il nome passato non esiste e verrebbe ritornato un errore. Nel caso peggiore, però, al parametro potrebbero essere passate delle stringhe “../” e l’attaccante si ritroverebbe a navigare liberamente nei file accessori della applicazione.

A questo punto si innesca l’attacco Path Traversal.
È possibile identificare due tipologie dello stesso attacco a seconda del tipo di path passato:

  • Absolute Path Traversal

L’absolute path è il percorso che porta dalla radice dell’albero dei file fino ad una determinata cartella o singolo file.
Se l’attaccante conoscesse la struttura interna dei file potrebbe navigare liberamente. Esistono delle convenzioni sul nome delle cartelle e la loro posizione rispetto alla radice, spesso dettate dai sistemi operativi in funzione sulle macchine host. Ad esempio su server UNIX si accede ai file delle password dalla root passando in parametro /etc/passwd. L’applicazione vulnerabile non pone restrizioni sulla tipologia o la forma dei valori passabili tramite parametro e quindi l’attaccante è libero di accedere a dati sensibili ed esplorare file che dovrebbero rimanere nascosti.

  • Relative Path Traversal

L’esito di questa versione dell’attacco è lo stesso, ma la modalità con la quale è portato a termine è sensibilmente diversa.
A cambiare è solamente il path passato in parametro. Invece di partire direttamente dalla root, passando stringhe del tipo “/cartella/file”, si opta per un percorso relativo che parta, cioè, dal file attualmente acceduto. Così tornano in gioco le stringhe “../” e in parametro viene passata una stringa del genere: “../../../../../etc/passwd”, che consente di risalire per 5 livelli per entrare nella cartella etc.

In entrambi i casi l’attaccante potrebbe utilizzare la codifica del carattere NULL (%00) per troncare alcuni comandi implementati dai programmatori per gestire le estensioni file, in modo da poter passare in parametro veri e propri path.

L’attacco Path Traversal è già grave di per sé ma può addirittura mutare in altre tipologie di attacco, sempre legate allo sfruttamento di vulnerabilità nella validazione degli input in URL.

Se l’applicazione vulnerabile prevede che l’utente carichi dei file, l’attaccante può immetterne alcuni che risultano pericolosi se eseguiti e poi effettuare un Path Traversal per raggiungere il file caricato, il quale quindi verrà eseguito per danneggiare il sistema. Questo tipo di attacco si chiama Local File Inclusion ed ha come target quelle applicazioni che prevedono il caricamento di file sul sistema, ad esempio in form nella quale vanno caricati delle foto o documenti.

Alternativamente, l’attaccante passa un intero indirizzo web all’interno del parametro. L’applicazione si è rivelata vulnerabile, eseguendo ciecamente i valori passati nei parametri dell’URL. Dunque, un malintenzionato indica in quel campo un indirizzo web dove sa che è stato riposto un file malevolo.
L’attacco, che prende il nome di Remote File Inclusion, prosegue con l’esecuzione di tale file, con conseguenze che in genere possono arrivare anche alla compromissione del server el defacement del sito.

Path trasversal, un esempio pratico: CVE-2021-41773

Questo tipo di attacchi non è più diffuso come una volta, poiché i servizi moderni adottano delle pratiche di prevenzione in automatico.
Tali pratiche filtrano le stringhe che possono rivelarsi pericolose, respingendo alcune espressioni e codifiche.

Tuttavia, anche i sistemi più moderni possono essere affetti da errori che agevolano attacchi Path Traversal.

Nel settembre del 2021 un aggiornamento di Apache HTTP Server ha portato con sé una novità a dir poco sgradita.
Una vulnerabilità nel trattamento degli input, codificata CVE-2021-41773, consentiva di portare efficacemente a termine attacchi path traversal.
In particolare, l’attaccante poteva eludere i controlli sui percorsi passati dall’URL e, di conseguenza, mappare la disposizione dei file nel sistema passando stringhe simili a quelle già viste in precedenza.

Dopo un primo aggiornamento che non ha del tutto eliminato la vulnerabilità, la versione 2.4.51 ha risolto il problema ma riscontri di sfruttamento si sono registrati a seguire nei sistemi non aggiornati.

Rimedi e Best Practices contro attacchi Path Traversal

Per prevenire gli attacchi Path Traversal si può agire sia sulla validazione dei valori nell’URL sia implementando rigidi controlli sugli accessi alle varie ubicazioni nei file di sistema.

Nel primo caso si fa in modo che vengano filtrate dall’input tutto un insieme di stringhe che non sono necessarie.
È bene accertarsi che anche le varie codifiche in differenti codici standard vengano filtrate. Per chiarire, si pensi alla notoria stringa “../”.
Questa è rappresentabile anche come “%2E%2E%2F” con codifica URL esadecimale.
Ancora, la stessa stringa è rappresentabile anche come “%252E%252E%252F” in doppia codifica.

Nel secondo caso, se la navigazione è per forza di cose soggetta alle scelte dell’utente, bisogna o normalizzare l’input anche attraverso specifiche funzioni in uso nei vari linguaggi di programmazione lato server oppure definire un insieme di possibili file accettabili che si prevede possano comparire come valore nell’URL. In nessun caso, bisognerebbe integrare contenuti provenienti dagli utenti con le operazioni del sistema. In caso di bisogno, occorre limitare i dati utilizzabili ad un insieme ben definito e respingere tutti gli altri. In questo modo l’attaccante che cerca illecitamente di muoversi all’interno del sistema non avrà spazio di manovra.

Infine, si annota un’altra misura di sicurezza che riguarda l’uso di chroot jails per limitare la possibilità dell’utente di ottenere e salvare i file. Chroot è una operazione presente su sistemi UNIX che consente di limitare l’ambiente dove vive un programma, restringendo di fatto il numero di file raggiungibili.

Alcune considerazioni finali

La peculiarità degli attacchi di tipo Path Traversal è che consentono all’attaccante di mappare la struttura delle applicazioni vulnerabili per quanto concerne la disposizione delle varie cartelle.

Passando delle stringhe particolari, interpretate come comandi, è possibile cambiare directory ed accedere a file altrimenti nascosti. Questo ha ripercussioni negative importanti, poiché si espongono informazioni sensibili alla mercé di criminali, i quali possono così proseguire l’azione con attacchi più complessi e strutturati.

Gli attacchi Path Traversal sono evitabili implementando delle buone difese. Lo si può fare sia con delle buone norme di validazione dell’input sia definendo con precisione l’insieme di file accettabili che possono essere chiamati tramite URL.

Cyberment Srl

Cyberment è un’azienda specializzata in consulenza di sicurezza informatica da oltre 20 anni.

Il nostro red team è composto da hacker etici e esperti specialisti in cybersecurity.

Ci occupiamo di identificare le vulnerabilità informatiche nei sistemi e nelle applicazioni web tramite servizi di Vulnerability Assessment e Penetration Test.

Siamo un’azienda di sicurezza informatica certificata ISO 9001, ISO 27001, nonché azienda etica. Abbiamo sede legale a Milano e sede operativa a Porto Mantovano, mentre Londra è il cuore del nostro reparto ricerca e sviluppo.

Se desideri conoscere in modo approfondito i nostri servizi di prevenzione dalle minacce informatiche, contattaci!