Continua la serie riguardo le XML External Entity (XXE)

Gli articoli precedenti di questa serie hanno trattato le XML External Entity (XXE), cioè quando un cyber-criminale invia una richiesta con un payload XXE per ottenere una risposta da specifiche applicazioni web che contengono i dati che si vogliono ottenere. Tuttavia, spesso non è questo il caso.

Ci sono molte situazioni in cui un utente malintenzionato può inviare dei payload XML External Entity (XXE) ad un'applicazione web senza avere una risposta indietro.
Questa vulnerabilità è conosciuta come Out-of-band. Il processo che porta a sfruttare una simile vulnerabilità è simile all'esempio precedente che utilizzava entità di parametro, con una differenza: il cyber-criminale deve ottenere il parser XML per fare una richiesta aggiuntiva a un server controllato dai criminali per leggere il contenuto del file.

 

Di seguito è riportato un esempio di come un utente malintenzionato potrebbe utilizzare le entità di parametro per rubare i dati utilizzando una tecnica di out-of-band (OOB):

Il decodificatore XML per prima cosa processerà l'entità di parametro dei file, così da caricare il file /etc/lsb-release. Successivamene il parser XML farà una richiesta al DTD dei cyber-criminali all'indirizzo http://attacker.com/evl.dtd.

Una volta che il DTD del cyber-criminale è stato processato, l'entità di parametro all% creerà un'entità generale chiamata &send;, che contiene un URL in cui sono presenti i contenuti dei file (es. http://attacker.com/?collect=DISTRIB_ID=Ubuntu…). Infine, una volta che l'URL è stata creata, l'entità &send; verrà processata dal decodificatore, che attuerà una richiesta al server del cyber-criminale. Quest'ultimo poi potrà accedere alla richiesta da remoto e ricostruire i contenuti dei file della richiesta registrata.

Conclusione

L'XML External Entity (XXE), che non è così diffusa come altre vulnerabilità, è comunque una vulnerabilità molto grave che colpisce qualsiasi applicazione web o in un modo o nell'altro i parser XML.

L'XML External Entity (XXE) può essere usata per rubare file di sistema e/o codici sorgenti nei server locali, oppure può essere usata per lanciare degli attacchi Server-side Request Forgery (SSRF) verso altri server all'interno della rete. L'XXE inoltre può essere utilizzata per causare attacchi DoS (Denial of Service) quando si utilizzano alcuni decodificatori XML insieme alle entità esterne, che sono attivate di default, nonostante non siano quasi mai necessarie per l'applicazione.​