I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

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 complesso. 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:

instagram viewer

  • Il nome del file caricato.
  • Il tipo di contenuto del file caricato.

Questi due elementi sono dove hai la possibilità 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 di moduli di caricamento file, la prima cosa da fare è il processo di whitelisting per l'estensione del file. Ad esempio, un utente desidera caricare un file denominato "muo.jpeg". Devi assicurarti che l'estensione del 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);
interruttore($file_parts['estensione'])
{
caso "jpg":
rottura;

caso "pipistrello": // Oppure exe, dll, so, ecc.
rottura;

caso "":
casoNULLO: // Nessuna estensione di file
rottura;
}

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.

Fai attenzione a non creare dati di estensione del file analizzando il nome del file in base al carattere punto (.), perché l'attaccante può ignorare questo passaggio di controllo con un nome file come "muo.jpeg.php".

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.

Supponiamo che tu codifichi un meccanismo per controllare correttamente l'estensione del file e accetti solo file con estensione .jpeg. Oltre a questo meccanismo precauzionale, puoi controllare le informazioni sul tipo di contenuto subito caso e accetta solo file con informazioni immagine/jpeg, un ulteriore livello di protezione contro 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 l'estensione tag, 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:

  1. L'attaccante malintenzionato carica un file SWF (un formato di file Adobe Flash) denominato "image.jpeg" nel sito Web di destinazione. Durante il processo di caricamento, nella verifica della whitelist viene confermato che il file caricato dall'aggressore 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 (punto) sito-target (punto) com/images/images.jpeg".
  2. Supponiamo che l'attaccante abbia un sito web chiamato attacker (dot) com. L'attaccante chiama il file image.jpeg caricato sul sito di destinazione su questo sito Web, utilizzando l'estensione tag con l'assegnazione del tipo application/x-shockwave-flash.
  3. Un utente innocente accede all'attaccante (punto) com. Quel sito richiama il file SWF all'indirizzo www (punto) target-site (punto) com/images/image.jpeg ed esegue i comandi dati al file SWF.
  4. In questo modo, l'attaccante informatico può creare azioni di richiesta HTTP per l'indirizzo com del sito di destinazione (punto) senza che gli utenti normali se ne accorgano. Con queste richieste, l'attaccante utilizzerà la sessione dell'utente innocente e la bypasserà il controllo CSRF.

Per comprendere più chiaramente questo scenario di attacco, considerare il codice seguente come contenuto nell'HTML contenuto inviato all'utente dall'attaccante (punto) com:

stile="altezza: 1px; larghezza: 1px;" dati="www.target-site.com/images/image.jpeg" tipo="applicazione/x-shockwave-flash" consentiscriptaccess="Sempre" flashvar="c=leggere&u=qualcosa"

Una delle migliori soluzioni è accedere ai file caricati con caricamento file tramite un sottodominio diverso. Nello scenario di cui sopra, puoi accedere ai file statici non dallo stesso dominio, ma da un diverso sottodominio come segue: "http (due punti)//file.target-site (punto) com/images/image.jpeg".

Un'altra soluzione è aggiungere Contenuto-disposizione: attaccamento informazioni alla risposta HTTP quando ricevi una richiesta di accesso ai file che desideri 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.