XXE - Réutilisation d'une DTD locale pour extraire des données

Exploiting XXE to retrieve data by repurposing a local DTD

Exploitation d'une vulnérabilité XXE sur la fonctionnalité Check stock : le serveur analyse du XML mais n'affiche pas directement le résultat. L'approche consiste à référencer une DTD locale présente sur le serveur et à redéfinir une entité pour provoquer une erreur contenant le contenu de /etc/passwd.

Les systèmes utilisant l'environnement GNOME possèdent souvent une DTD locale située à /usr/share/yelp/dtd/docbookx.dtd qui définit une entité nommée ISOamso. On profite de cette DTD déjà présente pour injecter des entités paramétriques malicieuses

Forcer le parseur XML à générer une erreur qui divulgue le contenu de /etc/passwd en redéfinissant une entité de la DTD locale.

La tentative précédente produit une erreur côté serveur.

On déclare la DTD locale et on redéfinit l'entité ISOamso pour injecter des entités paramétriques qui lisent /etc/passwd puis forcent une exfiltration par une entité inexistante afin de provoquer une erreur contenant le contenu lu.

Lorsque la DTD locale est incluse et que l'entité ISOamso est redéfinie comme ci-dessus, le parseur tente de résoudre l'entité exfil pointant vers un chemin non existant (file:///noexist/...). Cette résolution provoque une erreur du parseur qui, dans sa trace, inclut le résultat de l'expansion — c'est ainsi que le contenu de /etc/passwd apparaît dans le message d'erreur retourné par le serveur.

Mis à jour

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