Injection XXE
Un fichier XML téléchargé qui lit les propres fichiers du serveur.
Qu'est-ce que Injection XXE?
XXE transforme un analyseur XML en une primitive de lecture de fichiers et de falsification de requêtes. L'attaquant déclare une entité SYSTEM dans un DOCTYPE et l'analyseur intègre un fichier local ou la réponse d'une URL interne avant que votre code ne voie le document. Cela en fait un bug de configuration de l'analyseur plutôt qu'un bug de forme d'entrée. Vous pointerez un téléchargement de bon de commande vers file:///etc/passwd et le relirez dans le champ du fournisseur en écho. Ensuite, vous corrigez libxmljs.parseXml(..., { noent: true }) : rejetez les déclarations DOCTYPE et d'entité, et analysez avec la résolution d'entité externe et de DTD désactivée.
Ce que vous apprendrez dans Injection XXE
- Reconnaître XXE comme un bug de configuration de l'analyseur, pas un bug de forme d'entrée
- Lire une charge utile XML et identifier la déclaration d'entité SYSTEM qui la rend dangereuse
- Comprendre que XXE se généralise de la lecture de fichiers locaux à la récupération d'URL interne (SSRF)
- Appliquez le correctif au niveau de l'analyseur (désactiver la résolution des entités externes) et superposez les contrôles de défense en profondeur.
- Auditez chaque site d'appel d'analyse XML pour le même indicateur une fois qu'il en a trouvé un.
Injection XXE — Étapes de la formation
-
Trouver la fonction d'admission
Brackwell Logistics permet à tout fournisseur enregistré de soumettre un bon de commande en le téléchargeant sous forme de fichier XML. Le formulaire prend le document, l'analyse sur les serveurs de Brackwell et lit le fournisseur et le total. Bob ouvre la fonctionnalité pour voir comment elle se comporte avant de la toucher.
-
Où l'analyse se produit
Une ligne sur cette page est la seule raison pour laquelle Bob est intéressé.
-
Télécharger une commande normale
Tout d’abord, observez le comportement normal de la fonctionnalité. Bob joint un bon de commande ordinaire et le soumet. Le panneau Réseau du navigateur enregistre la demande et la réponse du serveur, exactement ce qu'un développeur voit dans DevTools.
-
Ce que l'analyseur a fait écho
La commande a été analysée proprement. Un détail dans la réponse indique à Bob comment l'attaquer.
-
Partir d'un fichier normal
Bob ouvre le bon de commande ordinaire dans son éditeur. À l’heure actuelle, c’est exactement à quoi cela ressemble : un fournisseur et des données totales et claires. XML permet à un document de déclarer une entité externe, un espace réservé nommé dont l'analyseur récupère la valeur ailleurs. Bob est sur le point d'en ajouter un.
-
Armer le fichier
Bob ajoute un DOCTYPE qui déclare une entité externe pointant vers un fichier sur le disque, puis pointe le champ fournisseur vers cette entité. Le fichier est toujours analysé comme un bon de commande. Il commence par le fichier que possède chaque machine Linux, pour prouver que l'analyseur suit la référence.
-
L'entité
Deux lignes suffisent.
-
Téléchargez le fichier contrefait
Bob soumet son fichier spécialement conçu via la même fonction d'admission. Pour le navigateur, il s’agit simplement d’un autre téléchargement de bon de commande.
-
Le fichier revient
La réponse n'est pas un nom de fournisseur. Il s'agit du fichier de mots de passe du serveur, lu sur le disque et restitué directement via la sortie normale du téléchargement.
-
Contrôle des connaissances
Vous venez de regarder un téléchargement de bon de commande lire les fichiers du serveur. Verrouillez pourquoi.
Couverture des référentiels de sécurité
OWASP Top 10
- A02:2025 Security Misconfiguration
- A05:2021 Security Misconfiguration
CWE
- CWE-611 Improper Restriction of XML External Entity Reference
- CWE-918 Server-Side Request Forgery (SSRF)
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security