Quando si parla di XXE injection si fa riferimento ad una vulnerabilità web molto diffusa che permette ad un hacker di impossessarsi dei dati nei nostri server o di procedere con una cosiddetta “escalation” dell’attacco che potrebbe compromettere il server attaccato e altre infrastrutture ad esso collegate.
Prima di tutto vediamo cosa vuol dire XXEi ossia XML external entity injection. Per spiegare come funziona dobbiamo però sapere cos'è l’XML, acronimo di eXtensible Markup Language.
In breve, in informatica l’XML è un linguaggio usato per definire elementi e il loro significato all’interno di un testo. XML è estensibile ossia permette di definire dei tag personalizzati, tag che organizzano e definiscono ciò che si trova nel nostro documento.
All’interno del documento XML un oggetto può essere rappresentato attraverso una “entità” invece di utilizzare l’oggetto in sé.
Nel file DTD (document type definition) vi sono tutte le specifiche che definiscono le tipologie di dati che il nostro documento XML può contenere, i valori che gli possono essere assegnati ed altro ancora.
XML permette la creazione di entities o la possibilità di importarne di esterne, ed eccoci giunti alla definizione di external entities.
Le external entities sono delle entità non definite dal nostro DTD ma completamente esterne ad esso e vengono specificate attraverso un URL dal quale vengono caricate nell’applicazione.
Ora non è difficile capire i rischi che questa procedura potrebbe comportare verso i nostri sistemi.
Gli attacchi più comuni che sfruttano questa vulnerabilità puntano alla sottrazione di dati e password dai nostri database ma lo scenario più grave si presenta quando questa vulnerabilità viene utilizzata per portare un attacco di tipo Server-Side Request Forgery o in breve SSRF.
L’SSRF è un attacco nel quale una applicazione appartenente al server può venire utilizzata dall’hacker per avviare delle richieste verso qualunque indirizzo web e portare ad una compromissione inizialmente del server attaccato e in seguito di ogni infrastruttura ad esso collegata e potenzialmente vulnerabile.
L’XXEi ha come bersaglio principale le applicazioni che svolgono il parsing (ossia una analisi dei componenti) dell’XML che presentano una configurazione debole, applicazioni che accettano XML da fonti non fidate e applicazioni che non disabilitano l’utilizzo delle external entities.
Per scongiurare la maggior parte degli attacchi esistono tutta una serie di best practices tra le quali possiamo menzionare:
- la procedura di whitelisting a livello server, che ha lo scopo di bloccare ogni input che non rispetta i nostri standard di sicurezza;
- eseguire una validazione del dato XML;
- bloccare l’opzione dei parser XML di accettare entità esterne, ovvia ma spesso non utilizzata.
Con questi semplici accorgimenti è possibile prevenire una grande percentuale degli attacchi di tipo XXE.
Per trovare eventuali vulnerabilità di questo tipo possiamo in ogni caso utilizzare uno strumento molto utile e potente, chiamato Burp Suite, un software in grado di mappare le vulnerabilità di una applicazione web ed analizzarne le caratteristiche.
In ogni caso è sempre utile ricordarsi che la maggior parte degli attacchi è dovuta alla presenza di vulnerabilità nel software, riconducibili ad errori dei programmatori che non sempre sono adeguatamente preparati per lo sviluppo sicuro ecco perchè sempre più spesso si sente parlare di formazione per DevOps e DevSecOps, concetti strettamente legati allo sviluppo software e alla sicurezza.
Sitografia:
https://owasp.org/www-community/vulnerabilities/XML_External_Entity_(XXE)_Processing
https://portswigger.net/burp/documentation
https://www.redhat.com/it/topics/devops
https://www.pluribus-one.it/it/servizi/formazione/offerta-formativa-2
https://owasp.org/www-project-devsecops-guideline
https://abu-talha.medium.com/xml-external-entity-xxe-attacks-understandi... (sito da cui è stata tratta l'immagine)