Iniezioni di entità esterne XML (XXE)

OWASP category: MASVS-CODE: Code Quality

Panoramica

L'iniezione di entità esterne XML (XXE) è un attacco contro le applicazioni che analizzano l'input XML. Un attacco XXE si verifica quando un input XML non attendibile con un riferimento a un'entità esterna viene elaborato da un analizzatore sintattico XML configurato in modo errato. Questo attacco può essere utilizzato per organizzare più incidenti, tra cui Denial of Service, accesso al file system o esfiltrazione di dati.

Impatto

Quando un'applicazione analizza un documento XML, può elaborare qualsiasi DTD (Document Type Definition, noto anche come entità esterne) contenuto nel documento. Un malintenzionato può sfruttare questo comportamento iniettando codice dannoso come DTD. Questo codice può quindi accedere a parti del file system del dispositivo, accessibili solo all'applicazione e che potrebbero contenere dati sensibili. Inoltre, questo codice dannoso può effettuare richieste dal dispositivo, potenzialmente bypassando le misure di sicurezza perimetrale.

Infine, se l'applicazione espande le DTD, può creare una situazione con più iterazioni di entità a cui viene fatto riferimento, esaurendo le risorse del dispositivo e portando a un attacco Denial of Service.

Mitigazioni

Disabilita le DTD

Il modo più sicuro per prevenire gli attacchi XXE è disabilitare completamente le DTD (entità esterne). A seconda dell'analizzatore sintattico in uso, il metodo potrebbe essere simile all'esempio seguente per la libreria XML Pull Parser:

Java

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

Kotlin

val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)

La disattivazione delle DTD rende l'analizzatore sintattico sicuro anche contro gli attacchi Denial of Service. Se non è possibile disabilitare completamente le DTD, le entità esterne e le dichiarazioni di tipo di documento esterno devono essere disabilitate in modo specifico per ogni analizzatore sintattico.

A causa del gran numero di motori di analisi XML sul mercato, i modi per prevenire gli attacchi XXE variano da motore a motore. Per ulteriori informazioni, consulta la documentazione del motore.

Esegui la sanificazione dell'input

L'applicazione deve essere riconfigurata in modo da non consentire agli utenti di iniettare codice arbitrario nel preambolo del documento XML. Questa operazione deve essere verificata sul lato server, poiché i controlli lato client possono essere bypassati.

Utilizza una libreria diversa

Se la libreria o il metodo utilizzato non può essere configurato in modo sicuro, è consigliabile utilizzarne un altro. XML Pull Parser e SAX Parser possono entrambi essere configurati in modo sicuro, impedendo l'utilizzo di DTD ed entità.

Risorse