Aller au contenu
ForenShield - plateforme d’analyse forensique et cybersécuritéForenShield

XML External Entity · XXE

Un XML piégé. Un fichier local lu.

Un parseur XML vulnérable interprète une entité externe SYSTEM et renvoie le contenu d'un fichier interne. L'attaque se déroule en une seule requête.

  • ≈ 4 min
  • Équipes techniques
  • Entité externe
  • Lecture de fichier
  • Parseur XML
  • OWASP A05

Simulation pas à pas

Suivez l'attaque étape par étape

api.intranet.local/xml-import
Service XML Import
Portail Import - Service XML

Document XML reçu

<!-- Import XML attendu... -->
Étape 1 sur 4

Un service XML interne exposé

L'application accepte des fichiers XML pour importer des données ou configurer un service.

Une interface XML souvent oubliée

Import XML, webservice SOAP, API de configuration : ces points d'entrée peuvent traiter des documents sans vérifier les entités externes.

Chiffres clés

Une requête suffit à exfiltrer un secret

OWASP Top 10 · 2021

A05

Security Misconfiguration : la XXE y est classée depuis 2021
Clic requis

0

pour l'attaque
Fichier local lu

0

/etc/passwd ou .env
Données exposées

∞

à partir d'une seule requête

Protection

Comment s'en protéger

La XXE naît d'une configuration par défaut trop permissive. Elle se corrige surtout côté parseur.

  • Désactiver les entités externes

    Configurez le parseur pour refuser les DOCTYPE et les entités externes : c'est la correction principale.

  • Bibliothèques à jour

    Utilisez des parseurs récents, sûrs par défaut, et appliquez les correctifs de sécurité sans attendre.

  • Formats plus simples

    Préférez JSON quand c'est possible ; sinon, validez chaque document contre un schéma XSD strict.

  • Cloisonner le service

    Moindre privilège sur les fichiers et filtrage des flux sortants limitent ce qu'une XXE peut lire ou joindre.

Démo technique

Testez par vous-même

Cette simulation vous permet d'envoyer un XML malveillant et d'observer le comportement d'un parseur vulnérable. Tout est simulé dans la page : aucun fichier n'est lu, aucune requête n'est envoyée.

Démo interactive

Injectez une charge utile XXE

Simulation contrôlée

Aucune injection simulée

Choisissez une charge utile ou tapez la vôtre, puis cliquez sur Simuler

Entité externe XML

Le parseur XML lit une entité SYSTEM distante ou locale. Si les entités externes sont activées, le serveur peut charger un fichier système ou une ressource interne.

Comment se protéger

  • Désactiver les DTD et les entités externes dans le parseur XML.
  • Valider les documents XML avant traitement.
  • Utiliser un parseur sécurisé sans chargement de ressources externes.

Simulation pédagogique : aucune donnée réelle n'est transmise. Ne reproduisez ces techniques que sur des systèmes dont vous avez l'autorisation.

FAQ

Questions fréquentes

Qu'est-ce qu'une attaque XXE (XML External Entity) ?

XXE est une vulnérabilité qui exploite les parseurs XML mal configurés acceptant les entités externes. En définissant une entité XML pointant vers un fichier local (file:///etc/passwd) ou une URL interne, l'attaquant peut lire des fichiers sensibles du serveur, effectuer du SSRF, ou provoquer un déni de service (« billion laughs », une expansion d'entités en cascade qui sature la mémoire).

Comment fonctionne l'injection XXE ?

La charge utile (payload) XXE de base : <!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]><foo>&xxe;</foo>. Lors de l'analyse, le serveur remplace &xxe; par le contenu du fichier /etc/passwd et le retourne dans la réponse. Pour la SSRF par XXE, on remplace file:// par http:// pour faire des requêtes vers des services internes.

Comment prévenir les attaques XXE ?

Prévention XXE : désactiver le traitement des entités externes et DTD dans tous les parseurs XML (FEATURE_EXTERNAL_GENERAL_ENTITIES=false en Java), utiliser des formats moins dangereux comme JSON quand possible, valider et filtrer les entrées XML côté serveur, et mettre à jour les bibliothèques XML régulièrement (beaucoup de parseurs anciens sont vulnérables par défaut).

Quelles bibliothèques XML sont vulnérables par défaut au XXE ?

Les bibliothèques vulnérables par défaut incluent : libxml2 (PHP, Python, Ruby) avant configuration, Java SAX Parser, Java DOM Parser, .NET XmlDocument (Framework), Python lxml. Les bibliothèques sûres par défaut : defusedxml (Python), nokogiri avec NONET (Ruby). OWASP classe XXE en A05:2021 (Security Misconfiguration).

Pour aller plus loin

Outils et lectures liés à ce module

Formez vos équipes avec un expert

Ateliers de sensibilisation sur mesure, simulations d'attaques et formations pour ancrer les bons réflexes dans votre organisation.