Comment empêcher les attaques de l'entité externe XML (XXE)?
Empêcher les attaques de l'entité externe XML (XXE) à désactiver la capacité de votre application à résoudre les entités externes. Ceci est principalement réalisé grâce à des modifications de configuration au niveau de l'analyseur. Different programming languages and XML processing libraries have varying methods, but the core principle remains the same: prevent the parser from accessing external resources specified within the XML document.
Here's a breakdown by common scenarios:
-
Java: When using libraries like
javax.xml.parsers.SAXParserFactory
or javax.xml.parsers.DocumentBuilderFactory
, set the setFeature("http://xml.org/sax/features/external-general-entities", false)
et setFeature("http://xml.org/sax/features/external-parameter-entities", false)
Flags to false
. Cela désactive explicitement le traitement des entités générales et des paramètres. Pour les versions plus récentes de Java, envisagez d'utiliser le XMLInputFactory
avec des fonctionnalités de désactivation similaires. - PHP: L'extension de PHP
libxml
offre des contrôles similaires. Des fonctions comme libxml_disable_entity_loader(true)
désactiver efficacement le chargement des entités externes. Il est crucial d'appeler cette fonction avant analyser toutes les données XML. - Python: Python
xml.etree.ElementTree
et d'autres bibliothèques de traitement XML manquent souvent de contrôles directs pour la désactivation des entités externes. Cependant, la meilleure pratique ici est d'éviter d'utiliser directement l'entrée XML non fiable. Au lieu de cela, désinfecter ou valider les données XML avant de l'analyse, empêchant efficacement les entités malveillantes d'être traitées. Des bibliothèques comme defusedxml
fournissent des alternatives plus sûres aux analyseurs XML standard. - Node.js: Similaire à Python, les bibliothèques Node.js pourraient ne pas offrir une désactivation directe d'entité. Concentrez-vous sur la validation et la désinfecter les données XML d'entrée avant de l'analyse à l'aide de bibliothèques conçues avec la sécurité à l'esprit. Évitez d'utiliser directement une entrée potentiellement malveillante avec des analyseurs standard.
N'oubliez pas de consulter la documentation de votre bibliothèque et un cadre spécifiques d'analyse XML pour comprendre les options de configuration exactes disponibles pour désactiver la résolution des entités externes. Les mises à jour régulières de vos bibliothèques sont également cruciales pour bénéficier des derniers correctifs de sécurité.
Quelles sont les vulnérabilités communes qui conduisent à des attaques XXE?
Les vulnérabilités XXE découlent de la gestion non sécurisée de l'entrée XML par applications. Ils découlent souvent de:
- Configuration de l'analyseur XML inapproprié: Il s'agit de la cause la plus répandue. Si l'analyseur XML n'est pas configuré pour désactiver explicitement le traitement des entités externes, il résoudra facilement toutes les entités référencées dans le XML d'entrée, conduisant potentiellement à l'accès des fichiers locaux, des ressources du réseau interne ou même des serveurs distants via des protocoles Http. La désinfection est un risque important. Les attaquants peuvent élaborer des documents XML malveillants contenant des déclarations entités externes qui exploitent la vulnérabilité de l'analyseur.
- La validation des entrées insuffisantes: Même avec des analyseurs correctement configurés, la validation inadéquate de l'apport XML peut entraîner des problèmes. Les attaquants pourraient essayer d'injecter des entités malveillantes dans des données XML apparemment inoffensives, en contournant les contrôles superficiels.
- Manque de codage de sortie: Bien que ne pas provoquant directement la vulnérabilité XXE elle-même, un codage de sortie inadéquat peut exacerber l'impact. Si une application ne parvient pas à coder correctement la sortie XML, elle peut exposer des données sensibles intégrées dans la réponse XML, en faveur de la portée de l'attaque.
- Les bibliothèques périmées: L'utilisation de bibliothèques de l'analyse XML dérangée augmente le risque, car les versions plus récentes incluent souvent des patchs de sécurité adressant la vulnérabilité connue. Les vulnérabilités XXE?
- Les tests pour les vulnérabilités XXE nécessitent des techniques manuelles et automatisées.
Test manuel:
Blind XXE:
Cela implique un envoi de la réponse XML contenant des entités externes qui tentent d'accès à des ressources sans réception axée. Observez le comportement du système pour les anomalies, comme les retards inattendus ou la consommation de ressources. Par exemple, une entité faisant référence à un serveur distant lent peut entraîner un retard notable dans le traitement de la fuite de données XML.
(lecture du fichier local):
Construisez un document XML avec une déclaration d'entité pointant vers un fichier local (par exemple, - sur un système de type Unix). Si l'analyseur résout l'entité, les données sensibles du fichier peuvent être divulguées dans la réponse ou enregistrées.
Fuite de données (lecture du fichier distant): - similaire à la lecture du fichier local, mais l'entité pointe vers un fichier distant via HTTP ou d'autres protocoles. L'exploitation réussie révèle le contenu du fichier distant.
/etc/passwd
Out-of-Band (OOB) xxe: Cela implique d'utiliser une entité externe pour faire une demande à un serveur que vous contrôlez. Le serveur enregistre la demande, confirmant la vulnérabilité. -
Test automatisé: - Plusieurs outils peuvent automatiser la détection de vulnérabilité XXE:
- OWASP ZAP: Un scanner de sécurité d'application Web largement utilisé avec des fonctionnalités intégrées pour détecter les vulnérabilités XXE.
- Burp Suite: Un autre outil de sécurité Web populaire capable de détecter des défauts XXE par le biais de ses capacités de numérisation actives. Les scripts (par exemple, à l'aide de Python) peuvent fournir des tests ciblés pour des critères de terminaison XML spécifiques et des structures de données.
- N'oubliez pas de tester soigneusement et considérer divers vecteurs d'attaque pour assurer une couverture complète. Risques XXE:
Validation et désinfection des entrées:
Valider et désinfecter l'entrée XML avant de le traiter. Ne faites jamais confiance à la source ou au contenu des données XML reçu Données.
Pratiques de codage sécurisées:
Suivez les directives de codage sécurisées spécifiques à votre langage de programmation et à votre cadre lors des tests de données XML. Frameworks: Choisissez des bibliothèques et des frameworks de traitement XML qui fournissent des fonctionnalités de sécurité robustes et sont activement maintenus avec des mises à jour de sécurité régulières. - Principe de privilège le moins:
Assurez-vous que l'analyseur XML fonctionne avec les privilèges les moins possibles. Cela limite l'impact d'une attaque XXE réussie. - Surveillance et journalisation:
Implémentez la surveillance et la journalisation complètes pour détecter les activités suspectes liées au traitement XML. Cela permet des réponses opportunes aux violations potentielles. - En suivant avec diligence ces pratiques, vous pouvez réduire considérablement la probabilité et l'impact des attaques XXE sur vos applications. N'oubliez pas qu'une approche de sécurité multicouche est la plus efficace.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!