XXE
Def et Fonctionnement :
https://www.youtube.com/watch?v=gjm6VHZa_8s
XML eXternal Entity injection est une faille de sécurité WEB qui interagis avec le processing des données XML. Ces injections peuvent subvenir car les échanges entre le navigateur et le serveur utilisent un traitemement XML qui contient des fonctions faibles.
Généralement l'attaquant peut accéder à des documents stockés sur le file-server. Avec une escalade de privilèges il est possible de faire une SSRF.
XML est un langage de programmation utilisé pour transporter et stocker de la donnée. . Des XML entities, ce sont en gros des variables qui peuvent être utilisées dans plusieurs parties du XML, permettent de représenter des charactères (< correspond à <).DTD est une définition de la structure des échanges XML et quels sont les valeurs que ces échanges peuvent contenir. C'est dans le DTD que les variables sont créées. XML external entities sont des entités qui pour définition une localisation externe.
Les entities servent à beaucoup plus que juste stocker des variables. Cela peut permettre d'aller chercher des fichiers etc...
On voit donc facilement qu'il serait possible d'executer des commandes à partir d'un XML.
Types de XXE :
- Récupérer des fichiers : Un attaquant peut utiliser une vulnérabilité XXE pour accéder à des fichiers sensibles sur le serveur. En insérant une entité externe dans une requête XML, l'attaquant peut obtenir le contenu de fichiers comme
/etc/passwd
sur un système Unix ou Linux. - Faire une SSRF : (Server-Side Request Forgery) Un attaquant peut exploiter une vulnérabilité XXE pour forcer le serveur à envoyer des requêtes HTTP vers des systèmes internes ou externes, permettant potentiellement de contourner des restrictions de pare-feu et d'accéder à des services internes non exposés.
- Exfiltrer des données out-of-band : Dans certains cas, un attaquant peut exfiltrer des données via des canaux secondaires (out-of-band). Par exemple, en utilisant une entité externe pour forcer le serveur à se connecter à une URL contrôlée par l'attaquant, ce dernier peut capturer les données envoyées par le serveur.
- Récupérer des données par des msg d'erreur : Un attaquant peut provoquer des messages d'erreur XML en insérant des entités malveillantes qui forcent le serveur à renvoyer des informations sensibles dans les réponses d'erreur. Ces messages d'erreur peuvent contenir des informations de diagnostic, des chemins de fichiers ou d'autres données utiles pour l'attaquant.
Exemples :
Exploitation :
Liste de payloads : https://github.com/payloadbox/xxe-injection-payload-list
Tout d'abord il faut détecter la faille :
`<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "https://webhook.site/0bf66e36-79fa-4672-a625-a6cfe4a8bfd2"> ]>`
Cette attaque force le serveur backend à faire une requête à une URL, par exemple sur un de nos listenners.
Ressource :
https://portswigger.net/web-security/xxe
Remédiation :
Une cheat sheet sur la remédiation des failles XXE est disponibles ici : https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
La manière la plus courte et safe de se prémunir des XXE est de désactiver les DTDs entièrement.