Injections d'entités XML externes (XXE)

Catégorie OWASP : MASVS-CODE : qualité du code

Présentation

Une injection d'entité externe XML (XXE) est une attaque contre les applications qui analysent l'entrée XML. Une attaque XXE se produit lorsqu'une entrée XML non fiable avec une référence à une entité externe est traitée par un analyseur XML faiblement configuré. Cette attaque peut être utilisée pour mettre en scène plusieurs incidents, y compris un déni de service, un accès au système de fichiers ou une exfiltration de données.

Impact

Lorsqu'une application analyse un document XML, elle peut traiter toutes les définitions de type de document, également appelées entités externes, contenues dans le document. Un pirate informatique peut exploiter ce comportement en injectant du code malveillant en tant que DTD. Ce code peut ensuite accéder à des parties du système de fichiers de l'appareil, qui ne sont accessibles qu'à l'application et qui peuvent contenir des données sensibles. De plus, ce code malveillant peut envoyer des requêtes à partir de l'appareil, contournant ainsi les mesures de sécurité périmétriques.

Enfin, si l'application étend les DTD, cela peut créer une situation avec plusieurs itérations d'entités référencées, épuisant les ressources de l'appareil et conduisant à un déni de service.

Stratégies d'atténuation

Désactiver les DTD

Le moyen le plus sûr d'empêcher XXE consiste à toujours désactiver complètement les DTD (entités externes). Selon l'analyseur utilisé, la méthode peut ressembler à l'exemple suivant pour la bibliothèque d'analyseur XML pull:

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 désactivation des DTD permet également de protéger l'analyseur contre les attaques par déni de service. Si vous ne pouvez pas désactiver complètement les DTD, les entités externes et les déclarations de type de document externe doivent être désactivées de manière spécifique à chaque analyseur.

En raison du grand nombre de moteurs d'analyse XML sur le marché, les méthodes permettant d'empêcher les attaques XXE diffèrent d'un moteur à l'autre. Vous devrez peut-être consulter la documentation de votre moteur pour en savoir plus.

Nettoyer les entrées

L'application doit être reconfigurée pour qu'elle n'autorise pas les utilisateurs à injecter du code arbitraire dans le préambule du document XML. Vous devez vérifier cela côté serveur, car les contrôles côté client peuvent être contournés.

Utiliser une autre bibliothèque

Si la bibliothèque ou la méthode utilisée ne peut pas être configurée de manière sécurisée, vous devez en envisager une autre. L'analyseur XML pull et l'analyseur SAX peuvent tous deux être configurés de manière sécurisée, en interdisant les DTD et les entités.

Ressources