Origine de la faille XXE
La vulnérabilité XXE (XML External Entity) survient lorsque le parseur XML traite les entités externes contenues dans les données d'entrée. Un attaquant peut exploiter cela pour lire des fichiers locaux, effectuer des requêtes serveur à serveur (SSRF), exécuter des commandes ou causer un déni de service.
Stratégies de défense fondamentales
La solution principale consiste à désactiver le traitement des entités externes au niveau du parseur XML. Voici des exemples de code pour différentes plateformes.
Environnement PHP
Pour empêcher le chargement d'entités externes, utilisez :
xml_disable_entity_handling(true);
Cette fonction bloque l'interprétation des entités non locales lors de l'analyse XML.
Plateforme Java
Configurez la fabrique de documents XML pour rejeter les déclarations de type de document et les entités externes :
DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
fabrique.setFeature("http://xml.org/sax/features/external-general-entities", false);
fabrique.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
fabrique.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
Ces paramètres renforcent la sécurité en désactivant les fonctionnalités XML potentiellement dangereuses.
Framework .NET
Initialisez les paramètres de lecture XML pour exclure le traitement des DTD et des résolveurs externes :
XmlReaderSettings config = new XmlReaderSettings();
config.DtdProcessing = DtdProcessing.Prohibit;
config.XmlResolver = null;
Cette configuration garantit que les entités externes ne sont pas évaluées.
Filtrage des entrées utilisateur
Ajoutez une couche de validation en interceptant les caractères spéciaux dans les données XML soumises. Bloquez les séquences telles que :
- Accolades ouvrantes et fermantes { }
- Barres obliques inversées \
- Signes dièse #
Cela réduit le risque d'injection de code XML malveillant.
Déploiement d'un pare-feu applicatif (WAF)
Un WAF peut identifier et bloquer les tentatives d'attaque XXE connues. Par exemple, configurez ModSecurity pour surveiller les charges utiles XML suspectes. Après activation et redémarrage du service web, les requêtes malveillantes seront rejetées avec un code HTTP 403.
Approche de défense multicouche
- Désactiver les entités externes au niveau du parseur – mesure fondamentale.
- Valider et filtrer les entrées XML avant traitement.
- Utiliser un WAF comme barrière supplémentaire.
Environnements de test pratiques
Pour expérimenter avec les vulnérabilités XXE, utilisez des plateformes comme Pikachu ou bWAPP. Elles offrent des scénarios contrôlés pour tester la lecture de fichiers, le scan de ports et d'autres vecteurs d'attaque.