Identification et prévention des attaques XXE
Une faille XXE (External XML Entity) est une vulnérabilité de sécurité qui peut être exploitée dans les applications traitant du XML, permettant à un attaquant d’inclure des entités externes non sécurisées. Cette vulnérabilité peut entraîner l’extraction de données sensibles, un déni de service (DoS), ou même une attaque de type SSRF (Server-Side Request Forgery).
Comment survient une faille XXE ?
Des applications web utilisent des données fournies par les utilisateurs pour générer des fichiers XML ou des formats basés sur XML, comme des PDF, avant de les renvoyer aux utilisateurs.
Un utilisateur malintentionné peut tenter d’injecter des références à des entités externes dans le code XML, y compris des fichiers sensibles situés sur le serveur. Lorsque le serveur lit le XML, il tente de résoudre ces entités externes et de les intégrer au document final, qui est ensuite renvoyé au client, potentiellement avec des données sensibles incluses.
Exploitation d’une faille XXE
Exemple 1 - Extraction de fichiers
Une entité externe est définie pour contenir le contenu d’un fichier sensible, qui est ensuite renvoyé dans la réponse de l’application.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<stockCheck>
<productId>&xxe;</productId>
</stockCheck>
Exemple 2 - Attaques SSRF
Une entité externe est définie pour interroger une URL ciblant un système interne.
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/">
]>
Identification des attaques XXE
Attaques XInclude
<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>
Certaines applications reçoivent des données soumises par le client, les intègrent côté serveur dans un document XML, puis analysent le document. Un exemple de cela se produit lorsque les données soumises par le client sont placées dans une requête SOAP qui est ensuite traitée.
Dans cette situation, vous ne pouvez pas réaliser une attaque XXE classique, car vous ne contrôlez pas l'intégralité du document XML et donc ne pouvez pas définir ou modifier un élément DOCTYPE. Cependant, vous pourrez peut-être utiliser xinclude à la place.
XInclude fait partie de la spécification XML qui permet de créer un document XML à partir de sous-documents.
Upload de fichiers
Certaines applications permettent aux utilisateurs d'uploader des fichiers qui sont ensuite traités côté serveur. Certains formats de fichiers courants utilisent XML comme le format SVG ou DOCX. Par exemple, un attaquant peut soumettre une image SVG malveillante et ainsi atteindre la surface d'attaque cachée pour les vulnérabilités XXE.
Modification du Content-Type
La plupart des requêtes POST utilisent un type de contenu par défaut généré par les formulaires HTML, tel que application/x-www-form-urlencoded. Certains sites Web s'attendent à recevoir des requêtes dans ce format mais tolèrent d'autres types de contenu, notamment XML.
Si l'application tolère les requêtes contenant du XML dans le corps du message et analyse le contenu du corps en tant que XML, vous pouvez alors atteindre la surface d'attaque cachée XXE en reformatant simplement les requêtes pour utiliser le format XML.
Prévention des failles XXE
La plupart des vulnérabilités XXE apparaissent car la bibliothèque d’analyse XML supporte des fonctionnalités dangereuses non nécessaires à l’application.
Pour prévenir les attaques XXE, désactivez la résolution des entités externes et la prise en charge de XInclude.
Consultez la documentation de votre bibliothèque d’analyse XML ou API pour désactiver ces fonctionnalités.