
Dans cet article, nous expliquerons ce qu'est l'injection d'entités XML externes, décrirons quelques exemples courants, expliquerons comment trouver et utiliser différents types d'injections XXE, et généraliserons également comment prévenir les attaques avec leur aide.
Qu'est-ce qu'une injection d'entités XML externes?
L'injection d'entités XML externes (également appelée XXE) est une vulnérabilité de sécurité Web qui pourrait permettre à un attaquant d'interférer avec le traitement des données XML par une application. Il permet souvent à un attaquant de visualiser des fichiers dans le système de fichiers du serveur d'applications et d'interagir avec n'importe quel serveur ou système externe auquel l'application elle-même peut accéder.
Dans certaines situations, un attaquant pourrait exploiter une attaque XXE pour compromettre un serveur principal ou une autre infrastructure interne en exploitant la vulnérabilité XXE pour effectuer des attaques de contrefaçon de demande côté serveur (SSRF).
Comment les vulnérabilités XXE apparaissent-elles?
Certaines applications utilisent le format XML pour transférer des données entre le navigateur et le serveur. Les applications qui le font utilisent presque toujours la bibliothèque standard ou les API de plate-forme pour traiter les données XML sur le serveur. Les vulnérabilités XXE sont dues au fait que la spécification XML contient diverses fonctions potentiellement dangereuses et que les analyseurs standards prennent en charge ces fonctions, même si elles ne sont généralement pas utilisées par l'application.
Les entités externes XML sont un type d'entité XML personnalisée dont les valeurs spécifiques sont chargées à partir des fichiers DTD dans lesquels elles sont écrites. Les entités externes sont particulièrement intéressantes du point de vue de la sécurité, car elles vous permettent de définir une entité en fonction du contenu d'un chemin de fichier ou d'une URL.
Quels types d'attaques XXE existent?
- Utiliser XXE pour extraire des fichiers, où une entité externe incluant le contenu du fichier est déterminée et renvoyée dans la réponse de l'application.
- Utiliser XXE pour effectuer des attaques SSRF, où une entité externe est déterminée en fonction de l'URL du système interne.
- Utilisation de l'extraction aveugle des informations XXE sur le canal de contrôle, où les données sensibles sont transférées du serveur d'applications vers le système contrôlé par l'attaquant.
- Utilisation de blind XXE pour renvoyer des données à partir de messages d'erreur lorsqu'un attaquant peut déclencher un message d'erreur contenant les informations nécessaires.
- Utilisation de XXE pour extraire des fichiers
Pour effectuer une attaque de l'injection de forme XXE, qui extrait un fichier arbitraire du système de fichiers du serveur, vous devez modifier le XML présenté de l'une des deux manières suivantes:
- Entrez (ou modifiez) l'élément DOCTYPE qui définit l'entité externe contenant le chemin du fichier.
- Modifiez la valeur des données XML renvoyées dans la réponse de l'application pour utiliser une entité externe spécifique.
Par exemple, supposons qu'une application d'achat vérifie la quantité de stocks de produits en envoyant le XML suivant au serveur:
<?xml version="1.0" encoding="UTF-8"?> <stockCheck><productId>381</productId></stockCheck> XXE, XXE /etc/passwd, XXE: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <stockCheck><productId>&xxe;</productId></stockCheck>
Cette structure XXE définit une entité externe & xxe, dont la valeur est le contenu du fichier / etc / passwd, et utilise une entité avec la valeur productId. Cela provoque la réponse de l'application pour inclure le contenu du fichier:
Invalid product ID: root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin ...
Dans le cas de vulnérabilités XXE réelles, il y aura souvent un grand nombre de valeurs de données dans le XML soumis, toutes pouvant être utilisées dans la réponse de l'application. Pour les tests systématiques des vulnérabilités XXE, en règle générale, il sera nécessaire de vérifier chaque nœud de données en XML individuellement, en utilisant une entité spécifique et de voir l'état de la réponse.
En plus d'extraire des données sensibles, une autre façon d'utiliser les attaques XXE est de les utiliser pour de fausses requêtes côté serveur (SSRF).
Il s'agit d'une vulnérabilité potentiellement grave; avec son aide, l'application serveur peut être utilisée pour exécuter des requêtes HTTP vers n'importe quelle URL à laquelle le serveur peut accéder.
Pour utiliser la vulnérabilité XXE pour effectuer une attaque SSRF, vous devez définir une entité XML externe à l'aide de l'URL à laquelle vous souhaitez accéder et utiliser une entité spécifique avec une valeur de données. Si vous pouvez utiliser une entité spécifique avec la valeur des données renvoyées dans la réponse de l'application, vous pouvez afficher la réponse à partir de l'URL dans la réponse de l'application et ainsi obtenir une interaction bidirectionnelle avec le système serveur. Sinon, vous ne pouvez effectuer que des attaques SSRF aveugles (ce qui peut également avoir des conséquences critiques).
Dans l'exemple suivant utilisant XXE, une entité externe force le serveur à exécuter une requête HTTP interne au système interne au sein de l'infrastructure système:
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]>
Utilisation de XXE pour effectuer des attaques SSRF:
De nombreux types de vulnérabilités XXE sont aveugles. Cela signifie que l'application ne renvoie pas la valeur d'entités externes spécifiques dans ses réponses et que la recherche directe de fichiers côté serveur est donc impossible.
Les vulnérabilités aveugles XXE peuvent toujours être détectées et exploitées, mais des méthodes plus avancées sont nécessaires. Parfois, vous pouvez utiliser des méthodes externes pour rechercher des vulnérabilités et les utiliser pour exfiltrer des données. Il peut également parfois provoquer des erreurs d'analyse XML qui entraînent la divulgation de données sensibles dans les messages d'erreur.
Recherche et utilisation de vulnérabilités aveugles XXE:
La capacité d'attaquer avec une injection XXE est évidente dans de nombreux cas, car le trafic HTTP normal de l'application comprend des requêtes contenant des données XML. Dans d'autres cas, la capacité d'attaque est moins perceptible. Cependant, si vous regardez aux bons endroits, vous trouverez la possibilité d'une attaque XXE dans les requêtes qui ne contiennent pas XML.
XInclude Attacks
Certaines applications reçoivent des données envoyées par le client, les insèrent côté serveur dans un document XML, puis les analysent. Un exemple de cela est lorsque les données client sont placées dans une demande de backend SOAP, qui est ensuite traitée par le service de backend SOAP.
Dans ce cas, vous ne pouvez pas exécuter l'attaque XXE classique car vous ne contrôlez pas l'intégralité du document XML et ne pouvez donc pas déterminer ou modifier l'élément DOCTYPE. Cependant, vous pouvez utiliser XInclude à la place. XInclude fait partie de la spécification XML, qui vous permet de créer un document XML à partir de documents imbriqués. Vous pouvez placer une attaque XInclude sur n'importe quelle valeur de données dans un document XML, afin que l'attaque puisse être effectuée dans les situations où vous contrôlez un seul élément de données placé dans un document XML côté serveur.
Pour effectuer une attaque XInclude, vous devez référencer l'espace de noms XInclude et spécifier le chemin d'accès au fichier que vous souhaitez impliquer. Par exemple:
<foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/></foo>
Certaines applications permettent aux utilisateurs de télécharger des fichiers, qui sont ensuite traités côté serveur. Certains formats de fichiers courants utilisent XML ou contiennent des sous-composants XML. Des exemples de formats XML sont les formats de document Office tels que DOCX et les formats d'image tels que SVG.
Par exemple, une application peut permettre aux utilisateurs de télécharger des images et de les traiter ou de les vérifier sur le serveur après le téléchargement. Même si l'application s'attend à recevoir le format PNG ou JPEG, la bibliothèque de traitement d'image utilisée peut prendre en charge les images SVG. Étant donné que le format SVG utilise XML, un attaquant pourrait envoyer une image SVG illicite et ainsi être en mesure d'attaquer des vulnérabilités XXE.
Utiliser XXE en téléchargeant des fichiers image:
La plupart des demandes POST utilisent le type de contenu par défaut créé par les formulaires HTML, tel que application / x-www-form-urlencoded. Certains sites s'attendent à recevoir des demandes dans ce format, mais autorisent d'autres types de contenu, y compris XML.
Par exemple, si une demande régulière contient les éléments suivants:
POST /action HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 7 foo=bar : POST /action HTTP/1.0 Content-Type: text/xml Content-Length: 52 <?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
Si une application accepte les demandes contenant XML dans le corps du message et analyse le contenu en XML, vous pouvez avoir la possibilité d'attaquer XXE simplement en reformatant les demandes pour utiliser le format XML.
Comment trouver et vérifier les vulnérabilités XXE
La grande majorité des vulnérabilités XXE peuvent être trouvées rapidement et de manière fiable à l'aide du scanner de vulnérabilité Web Burp Suite.
- Les tests manuels des vulnérabilités XXE incluent généralement:
- Tester l'extraction de fichiers en définissant une entité externe basée sur un fichier de système d'exploitation connu et en utilisant cet objet dans les données renvoyées dans la réponse de l'application.
- Tester les vulnérabilités aveugles XXE en définissant une entité externe basée sur l'URL du système que vous gérez et en surveillant l'interaction avec ce système. Le client Burp Collaborator est idéal à cet effet.
- Test de l'inclusion vulnérable de données utilisateur non XML dans un document de serveur XML à l'aide d'une attaque XInclude pour tenter d'obtenir un fichier de système d'exploitation connu.
Comment prévenir les vulnérabilités XXE
Presque toutes les vulnérabilités XXE sont dues au fait que la bibliothèque d'analyse des applications XML prend en charge des fonctions XML potentiellement dangereuses que l'application n'a pas besoin ou n'est pas destinée à utiliser. Le moyen le plus simple et le plus efficace de prévenir les attaques XXE est de désactiver ces fonctionnalités.
En règle générale, il suffit de désactiver la résolution des entités externes et de désactiver la prise en charge de XInclude. Cela peut généralement être fait en utilisant des options de configuration ou en remplaçant par programmation le comportement par défaut. Pour plus d'informations sur la désactivation des fonctionnalités inutiles, consultez la documentation de la bibliothèque d'analyse XML ou API.
Vous pouvez utiliser
des laboratoires spécialisés comme terrain d'entraînement pour tester les compétences d'exploitation de ces vulnérabilités.
Les dernières configurations à double processeur de serveurs dédiés avec les processeurs évolutifs Intel 2019 sont disponibles sur
DEDIC.SH :
- 2x Xeon Silver 4214 - un total de 24 cœurs
- 2x Xeon Gold 5218 - un total de 32 cœurs
- 2x Xeon Gold 6240 - configuration avec 36 cœurs.
Le coût d'un serveur avec deux Xeon Silver 4214 - à
partir de 15210 roubles / moisNous sommes également prêts à collecter
toute configuration pour vous -
écrivez-nous !
Si de grandes puissances d'un serveur dédié ne sont pas nécessaires -
VDS à partir de 150 roubles / mois est ce dont vous avez besoin!