Come prevenire le vulnerabilità di caricamento dei file
I moduli di caricamento file sono uno degli anelli più deboli nelle applicazioni web. Eventuali errori commessi, anche quelli che consideri piccoli, potrebbero far cadere il controllo del server direttamente nelle mani di un cyberattaccante. Per questo motivo, gli sviluppatori di software devono conoscere gli errori più comuni e alcuni metodi di attacco che possono verificarsi.
Quindi cos’è la manomissione lato client? Come puoi combattere questo per mantenere i tuoi siti e i tuoi utenti al sicuro?
Cos’è la manomissione lato client?
La manomissione lato client è il concetto di base degli attacchi alle applicazioni Web nel loro insieme. In poche parole, significa che non puoi più fidarti di nessuno dei dati che invii all’utente. Inoltre, la manomissione lato client è uno dei fondamenti dello sviluppo di applicazioni sicure. Se esamini il modulo di caricamento file con cui hai a che fare e consideri la manomissione lato client, i dati di cui non ti puoi fidare includono:
- Il nome del file caricato.
- Il tipo di contenuto del file caricato.
Questi due elementi sono dove hai l’opportunità di inserire nella whitelist come sviluppatore di software. I dati del nome del file caricato possono contenere qualsiasi cosa con manomissione lato client. Con i dati Content-Type del file caricato, anche se l’aggressore sta caricando un file. exe, questo file potrebbe apparire come immagine/jpeg nel sistema.
Estensione file e lista bianca
Durante lo sviluppo dei moduli di caricamento file, la prima cosa da fare è il processo di inserimento nella whitelist per l’estensione del file. Ad esempio, un utente desidera caricare un file denominato “muo.jpeg”. Devi assicurarti che questa estensione di file che l’utente desidera caricare sia. jpeg. Per questo, il sistema dovrebbe controllare il file caricato e vedere se è una delle estensioni di file consentite. Per capire come puoi farlo, esamina il seguente semplice codice PHP:
$file_parts = pathinfo($filename);
switch($file_parts['extension'])
{
case "jpg":
break;
case "bat": // Or exe, dll, so, etc.
break;
case "":
case NULL: // No file extension
break;
}
Puoi farlo con un blocco di codice simile a quello sopra, oppure puoi utilizzare le classi e le funzioni fornite dal framework che stai utilizzando.
Che cosa sono le informazioni sul tipo di contenuto?
Le informazioni sul tipo di contenuto sono informazioni inviate nella richiesta HTTP per ogni caricamento di file. Il browser Internet rileva queste informazioni e le aggiunge alla richiesta inviata. L’attaccante può tentare di modificare le informazioni con la manomissione lato client e ignorare le convalide lato server. In questa fase, gli sviluppatori hanno bisogno di un meccanismo di controllo per effettuare convalide sulle informazioni sul tipo di contenuto. Questo da solo non sarà sufficiente; tuttavia, è un problema importante a cui gli sviluppatori devono prestare attenzione.
Diciamo che codifichi un meccanismo per controllare correttamente l’estensione del file e accetti solo file con l’estensione. jpeg. Oltre a questo meccanismo precauzionale, puoi controllare le informazioni sul tipo di contenuto per ogni evenienza e accettare solo file con informazioni immagine/jpeg, un ulteriore livello di protezione contro gli attacchi informatici
File Flash SWF e passaggi di attacco
L’estensione del file e i dati del tipo di contenuto non significano nulla per i browser Internet che supportano plug-in come Adobe Flash Player. Sebbene il supporto per quel lettore non sia più disponibile, è ancora possibile installare i relativi file su molti sistemi, anche se Flash rimane un rischio per la sicurezza. In un sistema che non ha preso le relative precauzioni, è possibile chiamare un file Flash con il tag <object>, indipendentemente dalla sua estensione. Ciò causerà un altro grave problema di sicurezza.
Per agire, gli sviluppatori devono conoscere i percorsi che i criminali informatici possono intraprendere. Ecco come può accadere:
- L’attaccante malintenzionato carica un file SWF (un formato di file Adobe Flash) denominato “image.jpeg” sul sito Web di destinazione. Durante il processo di caricamento, viene confermato nella verifica della whitelist che il file caricato dall’attaccante ha un’estensione. jpeg. La verifica del tipo di contenuto viene ignorata con la manomissione lato client. Immagina che questo file, caricato dall’attore della minaccia, vada su “www(dot)target-site(dot)com/images/images.jpeg”.
- Supponiamo che l’attaccante abbia un sito web chiamato attacker(dot)com. L’attaccante richiama il file image.jpeg caricato nel sito di destinazione su questo sito Web, utilizzando il tag <object> con l’assegnazione del tipo application/x-shockwave-flash.
- Un utente innocente accede a attacker(dot)com. Quel sito richiama il file SWF all’indirizzo www(dot)target-site(dot)com/images/image.jpeg ed esegue i comandi dati al file SWF.
- In questo modo, l’attaccante informatico può creare azioni di richiesta HTTP per l’indirizzo del sito di destinazione (punto) com senza che gli utenti normali se ne accorgano. Con queste richieste, l’attaccante utilizzerà la sessione dell’utente innocente e aggirerà il controllo CSRF.
Per comprendere più chiaramente questo scenario di attacco, si consideri il seguente codice nel contenuto HTML <object> inviato all’utente da attacker(dot)com:
style="height:1px;width:1px;" data="www.target-site.com/images/image.jpeg" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="c=read&u=somethings"
Una delle migliori soluzioni è accedere ai file caricati con il file upload tramite un diverso sottodominio. Nello scenario di cui sopra, è possibile accedere ai file statici non dallo stesso dominio, ma da un diverso sottodominio come segue: “http(colon)//file.target-site(dot)com/images/image.jpeg”.
Un’altra soluzione consiste nell’aggiungere Content-Disposition: informazioni sull’allegato alla risposta HTTP quando si riceve una richiesta di accesso ai file che si desidera caricare.
Prendere precauzioni per le vulnerabilità di caricamento dei file
Qualsiasi caricamento di file che gli utenti possono effettuare su un sito Web è pericoloso, quindi questo è uno dei problemi a cui gli sviluppatori dovrebbero prestare maggiore attenzione. Se gli aggressori scoprono una tale vulnerabilità, possono aprire una shell all’interno del sito e sfruttare facilmente le informazioni sul server. È di vitale importanza controllare tutti i file caricati dagli utenti, applicare metodi di whitelist e, se possibile, nascondere la posizione della directory caricata.
E, naturalmente, ci sono molti altri passaggi aggiuntivi che devi compiere per proteggere il tuo sito, anche se prendi tutte le precauzioni consigliate per caricare i moduli di file. L’utilizzo delle intestazioni di sicurezza HTTP è uno di questi passaggi che puoi eseguire.
Lascia un commento