Applications, sites et API
Particuliers et entreprisesExploitation des entités externes XML
XML external entity injection / XXE
Un document XML fait lire au service un fichier ou une ressource qu’il n’aurait pas dû consulter.
Je pense être concerné : que faire ?
Comprendre et agir
Découvrez le piège à partir d’un exemple, puis les gestes que vous pouvez faire. Vous pouvez suivre cette lecture sans connaissances en informatique.
Une situation concrète
Une association importe un catalogue XML envoyé par un partenaire. Le lecteur suit une référence présente dans le document et ouvre un fichier local de configuration. Le résultat de l’import révèle alors une partie de ce fichier.
Comment cela fonctionne
XML permet de décrire des données structurées. Certains lecteurs peuvent aussi résoudre des entités externes : des références vers un fichier ou une autre ressource. Une attaque XXE utilise cette fonction pour faire lire au service quelque chose que l’expéditeur ne devrait pas obtenir. Selon le lecteur et sa configuration, elle peut révéler des fichiers, déclencher des connexions internes ou perturber le service.
- Un document est importé
Il contient une référence à une ressource externe.
- Le lecteur suit cette référence
Il utilise les accès du serveur.
- Une ressource est exposée
Selon le chemin de retour et les droits du service.
Ce que vous pouvez faire
Vos premiers réflexes
Signalez un import qui affiche des données étrangères au document envoyé. Transmettez le fichier au support par son canal prévu, sans multiplier les essais sur le service.
Si vous êtes responsable du service ou de l’organisation
Identifiez les lecteurs XML réellement utilisés. Désactivez la résolution des ressources externes inutiles et vérifiez les accès aux fichiers comme les sorties réseau du service.
Bloquer les sorties Internet ne suffit pas si le lecteur XML peut encore ouvrir des fichiers locaux sensibles.
À vous de décider
Le service d’import ne peut pas accéder à Internet. Un document XML peut-il encore lui faire lire un fichier local ?
Prenez un moment pour répondre et expliquer votre choix, puis ouvrez la correction.
Voir la réponse expliquée
Oui, si son lecteur autorise ce type de référence et si le compte du service peut ouvrir le fichier. Il faut régler le parseur et limiter ses permissions ; bloquer Internet ne couvre pas cette lecture locale.
Analyser un cas technique
Ce cas s’adresse aux personnes qui développent, administrent ou analysent ces systèmes. Si vous découvrez le sujet, commencez par « Comprendre et agir ».
Étude de cas fictive
Un import XML lit une ressource locale inattendue
Le document de test conduit le parseur à ouvrir fixture-private.txt, puis un marqueur de ce fichier apparaît dans le résultat de l’import. Le scénario établit donc une lecture locale et un chemin de retour. Il ne nécessite aucune connexion réseau, ce qui explique pourquoi un filtrage Internet ne l’aurait pas arrêté.
Les champs présentés sont ajoutés pour l’exercice. Sur un service réel, il faut retrouver les options du parseur, les éventuelles transformations et la sortie livrée. Une erreur mentionnant un fichier ou un événement DNS aurait une portée plus limitée que le retour du marqueur.
Le traitement corrigé refuse la déclaration de type de document, car le format métier n’en a pas besoin. Si un service en a un besoin réel, il doit limiter précisément la résolution à des ressources de confiance. Le module Magento CVE-2024-34102 de Metasploit documente un autre cas de lecture par XXE ; notre import reste une reconstitution pédagogique indépendante.
Le déroulement en schéma
Faites défiler le diagramme pour suivre les échanges ; les noms des acteurs restent en haut. Sur petit écran, faites aussi défiler de gauche à droite.
- Action
Dépôt du document
Expéditeur vers Importeur
Trace job xml-21
- Action
Analyse du XML
Importeur vers Parseur
Trace résolution activée
- Action
Ouverture de la référence externe
Parseur vers Ressource locale
Trace fichier local
- Réponse
Lecture du marqueur
Ressource locale vers Parseur
Trace donnée factice
- Réponse
Résultat contenant le marqueur
Parseur vers Importeur
Trace lecture et retour reliés
- Réponse
Résultat d’import livré
Importeur vers Expéditeur
Trace exposition de test
- Refus / blocage
Import après correction
Importeur vers Parseur
Trace DOCTYPE refusé
Comment repérer cette attaque
Indices à rechercher
- Un import provoque une connexion réseau inattendue depuis le serveur.
- Une erreur de lecture mentionne une entité externe ou une ressource locale.
- Le résultat contient des fragments étrangers aux données envoyées.
Examiner les échecs de résolution, les accès inhabituels du processus de lecture et les destinations secondaires au moment des imports. Comparer les fichiers réellement ouverts et les résultats livrés, lorsque les preuves existent, sans conserver systématiquement les documents privés dans les journaux.
Quelles informations comparer
Relier le document préservé, le job d’import, la résolution et la sortie effective. Dans l’exercice, le retour du marqueur rattache la lecture au résultat ; en production, ce lien peut manquer faute de collecte.
Ce que ces indices ne permettent pas de conclure
Une ouverture de fichier ne prouve pas que son contenu a quitté le serveur. L’absence de connexion réseau n’écarte pas la lecture locale. Les options d’un parseur peuvent changer d’une version à l’autre.
Comment réagir
Suspendre le traitement exposé et durcir le parseur sur tous les chemins concernés. Préserver les documents pour l’analyse isolée. Évaluer les ressources accessibles avec l’identité du service, les sorties possibles et les secrets à remplacer après correction.
Vérifier la correction
L’équipe responsable du système peut utiliser ces contrôles dans un environnement de test autorisé. Vous pouvez lire et comprendre le cas sans effectuer ces manipulations.
- Le lecteur refuse les DTD inutiles et n’ouvre aucune ressource factice locale ou distante interdite.
- Les conversions intermédiaires et autres lecteurs XML appliquent les restrictions attendues.
- Les documents métier valides restent importables et le service conserve des permissions minimales.
À vous de raisonner
Le test retourne le marqueur d’un fichier local factice sans aucune connexion réseau. Un filtrage des destinations Internet aurait-il corrigé ce cas ?
Quelle décision prendriez-vous, et sur quel indice vous appuieriez-vous ? Répondez avant d’ouvrir la correction.
Comparer avec le raisonnement expliqué
Non. La ressource a été ouverte localement avec les permissions du service. Il faut empêcher cette résolution dans le parseur et limiter les accès aux fichiers. Pour ce format qui n’utilise pas de DTD, son refus est vérifiable ; les imports valides doivent aussi être testés.
Consulter les détails techniques
Les extraits permettent de s’exercer à lire les traces du cas. Si vous disposez des outils et des accès nécessaires, le guide de collecte vous aide aussi à rechercher ces informations.
Lire les extraits commentés (reconstitution fictive)
Ces extraits contiennent des valeurs fictives. Certains champs correspondent à ceux des outils documentés ; d’autres réunissent plusieurs sources pour faciliter l’explication. Vos propres exports pourront donc avoir une autre forme. Lisez d’abord les explications des champs, puis repérez-les dans les extraits.
external_entity_resolution- État inventé pour rendre la configuration visible dans l’exercice ; vérifier les options réelles du lecteur déployé.
result_marker_returned- Observation du marqueur factice dans le résultat de laboratoire, et non preuve d’un vol de configuration en production.
Reconstitution d’un import dans un environnement de test
JSONLTraces fictives d’un lecteur instrumenté ; resource désigne un fichier factice du laboratoire. Aucun parseur XML ne garantit ce format de journal.
{"job":"xml-21","environment":"isolated_test","external_entity_resolution":"enabled","resource":"fixture-private.txt","local_read":true}
{"job":"xml-21","result_marker_returned":true,"network_connection":false}
{"job":"xml-22","environment":"isolated_test","doctype":"rejected","local_read":false,"result_marker_returned":false}Préparer une collecte dans votre environnement
Utilisez les sources disponibles dans vos outils et auxquelles vous êtes autorisé à accéder. Vous pouvez comprendre la fiche sans posséder ces outils. Vérifiez que les journaux étaient activés pendant la période étudiée. Gardez l’export original avec son fuseau horaire et sa provenance dans un espace à accès restreint. Pour l’analyse, travaillez sur une copie dont vous avez retiré les secrets.
Service concerné — audit et historique à vérifier
- Où les trouver
- Dans l’outil d’administration ou les journaux du service concerné. Demander à son mainteneur où sont enregistrées les décisions d’autorisation et les opérations métier.
- Quoi relever
- Retrouver le job, le parseur, ses options et les transformations du document. Conserver les erreurs de résolution et le résultat livré, avec des accès restreints s’ils contiennent des données privées.
- Accès et prérequis
- Il n’existe ni fichier ni vocabulaire universels. Les champs proposés ici doivent être instrumentés s’ils manquent ; ne pas enregistrer mots de passe, jetons ou contenu privé intégral.
Linux — auditd
- Où les trouver
- Sur le serveur concerné, dans le fichier log_file d’auditd, généralement /var/log/audit/audit.log. Les enregistrements SYSCALL, EXECVE et PATH d’un même événement partagent le numéro dans msg=audit(...).
- Quoi relever
- Si des règles d’audit couvraient la ressource, relier l’ouverture au processus du parseur et à son résultat. Une simple mention de chemin dans une erreur ne prouve pas une lecture réussie.
- Accès et prérequis
- Service actif et règles d’audit adaptées avant les faits. Linux n’enregistre pas automatiquement toutes les exécutions et lectures ; les arguments et chemins collectés peuvent être sensibles.
Si vous pensez être concerné
Si vous utilisez le service
Signalez un import qui affiche des données étrangères au document envoyé. Transmettez le fichier au support par son canal prévu, sans multiplier les essais sur le service.
Pour l’équipe qui exploite le service
- Conservez le document et les identifiants de l’import dans un espace d’analyse protégé.
- Faites désactiver la résolution dangereuse et vérifier les autres traitements XML.
- Évaluez les fichiers lus, les connexions émises et les secrets éventuellement exposés.
Pour comprendre votre situation et trouver de l’aide : obtenir une assistance sur 17Cyber. Dans une organisation, prévenez aussi le responsable ou prestataire chargé de la sécurité.
Sources et repères pour approfondir
- OWASP — Prévention des entités externes XML — cheatsheetseries.owasp.org
- CWE-611 — Résolution incorrectement limitée d’entités externes — cwe.mitre.org
- Rapid7 — Magento XXE, CVE-2024-34102 — rapid7.com


