Iniezioni di entità esterne XML (XXE)

Categoria OWASP: MASVS-CODE: Qualità del codice

Panoramica

Un'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 parser XML configurato in modo debole. Questo attacco può essere utilizzato per eseguire più incidenti, tra cui attacchi di tipo Denial of Service, accesso al sistema di file o esfiltrazione di dati.

Impatto

Quando un'applicazione analizza un documento XML, può elaborare tutte le definizioni dei tipi di documenti (DTD, Document Type Definitions, note anche come entità esterne) contenute nel documento. Un malintenzionato può sfruttare questo comportamento inserendo codice dannoso come DTD. Questo codice può quindi accedere a parti del file system del dispositivo, accessibili solo all'applicazione e potenzialmente contenenti dati sensibili. Inoltre, questo codice dannoso può inviare richieste dal dispositivo, potenzialmente aggirando le misure di sicurezza perimetrali.

Infine, se l'applicazione espande i DTD, puoi creare una situazione con più iterazioni delle entità a cui si fa riferimento, esaurire le risorse del dispositivo e causare un rifiuto di servizio.

Mitigazioni

Disattivare i DTD

Il modo più sicuro per prevenire gli attacchi XXE è disattivare sempre completamente i DTD (entità esterne). A seconda del parser in uso, il metodo potrebbe essere simile al seguente esempio 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 disabilitazione dei DTD inoltre rende il parser protetto dagli attacchi denial of service. Se non è possibile disattivare completamente i DTD, le entità esterne e le dichiarazioni di tipo di documento esterno devono essere disattivate in modo specifico per ogni parser.

A causa del numero elevato di motori di analisi XML sul mercato, i modi per difendersi dagli attacchi XXE variano da un motore all'altro. Per saperne di più, potresti dover consultare la documentazione del motore.

Esegui la convalida degli input

L'applicazione deve essere riconfigurata in modo che non consenta agli utenti di inserire codice arbitrario nel preambolo del documento XML. Questo deve essere verificato sul lato server, poiché i controlli lato client possono essere aggirati.

Utilizzare una libreria diversa

Se la libreria o il metodo utilizzato non possono essere configurati in modo sicuro, è necessario considerarne uno diverso. XML Pull Parser e SAX Parser possono essere entrambi configurati in modo sicuro, impedendo DTD ed entità.

Risorse