Attacchi da manipolazione d'URL

Dicembre 2016
L'URL (Uniform Resource Locator) di un'applicazione web è il vettore che permette di indicare la risorsa richiesta.


Introduzione agli URL

Si tratta di una stringa di caratteri ASCII stampabile che si scompone in cinque parti:

Il nome del protocollo, cioè in qualche modo il linguaggio usato per comunicare sulla rete. Il protocollo più diffuso è il protocollo HTTP (HyperText Transfer Protocol), il protocollo che permette lo scambio di pagine web in formato HTML. Numerosi altri protocolli sono comunque utilizzabili (FTP, News, Mailto, ecc.);

login e password, permette di specificare i parametri di acceso ad un server sicuro. Questa opzione è sconsigliata dato che la password circola in chiaro nell'URL;

Il nome del server, si tratta del nome del dominio del computer che ospita la risorsa richiesta. Da notare che è possibile utilizzare l'indirizzo IP del server;

Il numero di porta, si tratta del numero associato ad un servizio che permette al server di sapere quale tipo di risorsa è richiesta. La porta associata per default al protocollo HTTP è la porta numero 80. Quindi, una volta che il servizio Web del server è associato al numero di porta 80, la specificazione del numero di porta è facoltativa;

Il percorso di accesso alla risorsa, quest'ultima parte permette al server di conoscere dove si trova la risorsa, cioè in generale la posizione (directory/cartella) e il nome del file richiesto.

Un URL ha la seguente struttura:

ProtocolloPassword (facoltativa)Nome del serverPorta
(facoltativo se 80)
Percorso
http://user:password@it.kioskea.net:80/glossair/glossair.php3


L'URL può permettere di trasmettere dei parametri al server facendo seguire il nome del file da un punto interrogativo, in seguito dei dati in formato ASCII. Un URL è quindi una stringa di caratteri secondo il seguente formato:

http://it.ccm.net/forum/?page=2 

Manipolazione d'URL

Manipolando alcune parti di un URL, un pirata può portare un servizio web a consegnare delle pagine web alle quali non avrebbe accesso. In effetti, nei siti web dinamici i parametri sono per la maggior parte passati attraverso l'URL nella maniera seguente:
http://bersaglio/forum/index.php3?cat=2


I dati presenti nell'URL sono creati automaticamente dal sito e al momento di una normale navigazione un utente deve solo cliccare sui link proposti dal sito web. In questo modo, se un utente modifica manualmente il parametro, potrà provare diversi valori, ad esempio:
http://bersaglio/forum/index.php3?cat=6


Se il programmatore non ha previsto questa eventualità, il pirata potrà eventualmente ottenere un accesso ad uno spazio normalmente protetto. D'altra parte, il pirata può portare il sito ad elaborare un caso inaspettato, ad esempio:
http://bersaglio/forum/index.php3?cat=***********
. Nel caso sopra citato, se il programmatore del sito non ha previsto il caso in cui il dato è una cifra, il sito può entrare in uno stato non previsto e rivelare delle informazioni in un messaggio di errore.

Tentativo alla cieca

Un pirata può eventualmente testare delle directory e delle estensioni di file alla cieca, allo scopo di trovare delle informazioni importanti. Ecco qualche esempio classico:

Ricerca di directory che permettono di amministrare il sito:

http://bersaglio/admin/
http://bersaglio/admin.cgi


Ricerca di script che permettono di rivelare delle informazioni sul sistema remoto:
http://bersaglio/phpinfo.php3


Ricerca di copie di backup. L'estensione .bak è generalmente usata e non è interpretata per default dai server, cosa che può portare alla visualizzazione di uno script:
http://bersaglio/index.php3.bak


Ricerca di file cache del sistema remoto. Nei sistemi UNIX, quando la cartella radice del sito corrisponde alla cartella di un utente, può succedere che dei file creati dal sistema siano accessibili via web:

http://bersaglio/.bash_history
http://bersaglio/.htaccess

Directory traversal

Gli attacchi detti «directory traversal» (attraversamento di cartelle o path traversal) consistono nel modificare il percorso dell'arborescenza dell'URL per forzare il server ad accedere a delle sezioni del sito non autorizzate. In un caso classico, l'utente può essere portato a risalire progressivamente l'arborescenza, soprattutto nel caso in cui la risorsa non è accessibile, ad esempio:

[http:/contents/525-codice-ascii] 
http://bersaglio/base/test/
http://bersaglio/base/


Sui server vulnerabili, basta risalire il percorso con più stringhe del tipo « ../ » :
http://bersaglio/../../../../directory/file 


Altri attacchi più evoluti consistono nel decodificare alcuni caratteri:

Sia sotto la forma di decodifica d'URL:
http://bersaglio/..%2F..%2F..%2Fdirectory/file


Sia con un'annotazione Unicode:
http://bersaglio/..%u2216..%u2216directory/file


Numerosi siti dinamici passano il nome delle pagine da visualizzare in parametri sotto una forma simile alla seguente:
http://bersaglio/cgi-bin/script.cgi?url=index.htm


Per quanto nessun controllo sia realizzato, è possibile per un pirata modificare l'URL manualmente per richiedere l'accesso ad una risorsa del sito alla quale non ha accesso diretto, ad esempio:
http://bersaglio/cgi-bin/script.cgi?url=script.cgi

Protezioni

Per mettere in sicurezza un server web dagli attacchi da manipolazione di URL, è necessario effettuare una sorveglianza sulle vulnerabilità e applicare regolarmente le correzioni fornite dallo programmatore del server web. D'altra parte, una configurazione minuziosa del server web permette di impedire ad un utente di navigare su pagine alle quali normalmente non avrebbe accesso. Il server web deve quindi essere configurato seguendo le consegne qui sotto:

Impedire il percorso delle pagine situate sotto la radice del sito web (meccanismo di chroot);

Disattivare la visualizzazione dei file presenti in una cartella che non contengano dei file di index («Directory Browsing»);

Cancellare le cartelle e i file inutili (fra cui i file nascosti);

Assicurarsi che il server protegga l'accesso alle cartelle contenenti dei dati sensibili;

Cancellare le opzioni di configurazione superflue;

Assicurarsi che il server interpreti correttamente le pagine dinamiche, compresi i file di backup (.bak);

Cancellare gli interpreter di script superflui;

Impedire la consultazione in modalità HTTP delle pagine accessibili in HTTPS.

Potrebbe anche interessarti :

URL manipulation attacks
URL manipulation attacks
Ataques de manipulación de URL
Ataques de manipulación de URL
Angriffe per Manipulation der URL
Angriffe per Manipulation der URL
Attaques par manipulation d'URL
Attaques par manipulation d'URL
Ataques por manipulação de URL
Ataques por manipulação de URL
Il documento intitolato « Attacchi da manipolazione d'URL » da CCM (it.ccm.net) è reso disponibile sotto i termini della licenza Creative Commons. È possibile copiare, modificare delle copie di questa pagina, nelle condizioni previste dalla licenza, finché questa nota appaia chiaramente.