XXE aveugle - exfiltration via DTD externe

Exploiting blind XXE to exfiltrate data using a malicious external DTD

Lab : fonctionnalité "Check stock" qui analyse du XML mais n’affiche pas le contenu injecté (blind XXE / OOB). Comportement observé : le parseur accepte une déclaration DOCTYPE reliant une DTD externe et effectue des requêtes vers celle-ci.

Exfiltrer silencieusement des données locales du serveur (par ex. /etc/hostname) en forçant le parseur XML à charger une DTD externe malveillante qui, elle-même, lit le fichier et déclenche une requête HTTP(S) vers notre serveur de contrôle (collaborator / exploit server) contenant le contenu lu.

Exemple de payload envoyé au serveur (appel initial qui inclut la DTD externe)

Remarque : ici la DTD externe est hébergée sur notre serveur (exploit server). Le parseur doit la récupérer pour que l’attaque fonctionne.

Contenu malveillant placé sur notre serveur (DTD externe)

La DTD fournie par le serveur d’exploit contient des entités qui lisent un fichier local et construisent une entité évaluée qui déclenchera une requête vers le collaborator avec le contenu exfiltré :

Explication succincte :

  • %file : lit le fichier local file:///etc/hostname.

  • %eval : construit dynamiquement une nouvelle entité exfil dont la valeur est une URL ciblant notre serveur d’exfiltration et incluant le contenu de %file en paramètre content.

  • %eval; et %exfil; provoquent l’expansion et la requête HTTP sortante contenant les données.

Exemple complet (appel final depuis l’attaquant vers l’application vulnérable)

  • La DTD à https://.../exploit contient les définitions DTD malveillantes ci-dessus.

  • Quand le parseur récupère et évalue cette DTD, il finit par effectuer une requête HTTP vers notre serveur d’exfiltration avec le contenu de /etc/hostname.

Mis à jour

Ce contenu vous a-t-il été utile ?