Injections d'entités XML externes (XXE)

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

Présentation

Une injection XML eXternal Entity (XXE) est une attaque contre les applications qui analysent les entrées 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 mal configuré. Cette attaque peut être utilisée pour organiser 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 DTD (Document Type Definitions, é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 depuis l'appareil, ce qui peut potentiellement contourner les mesures de sécurité du périmètre.

Enfin, si l'application développe des 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 entraînant un déni de service.

Stratégies d'atténuation

Désactiver les DTD

Le moyen le plus sûr d'éviter les attaques XXE est de toujours désactiver complètement les DTD (entités externes). Selon l'analyseur utilisé, la méthode peut être semblable à l'exemple suivant pour la bibliothèque 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 désactivation des DTD permet également au parseur d'être protégé contre les attaques par déni de service. S'il n'est pas possible de désactiver complètement les DTD, les entités externes et les déclarations de type de document externes doivent être désactivées d'une manière spécifique à chaque analyseur.

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

Nettoyer les entrées

L'application doit être reconfigurée pour empêcher les utilisateurs d'injecter du code arbitraire dans le préambule du document XML. Cette vérification doit être effectuée 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ées ne peuvent pas être configurées de manière sécurisée, il convient d'envisager d'en utiliser une autre. Les analyseurs XML Pull et SAX peuvent tous deux être configurés de manière sécurisée, en interdisant les DTD et les entités.

Ressources