XXE — Injeção de Entidade Externa XML
XXE permite leitura de arquivos locais (/etc/passwd) e exfiltração OOB via DNS. Veja exemplos de XXE em APIs SOAP, parsers de arquivo e como remediar.
O Que É XXE
XML External Entity (XXE) Injection ocorre quando parsers XML processam entidades externas definidas pelo usuário. Um atacante pode usar XXE para: ler arquivos locais do servidor (/etc/passwd, chaves SSH, configurações com credenciais), realizar SSRF via entidade de URL externa, e exfiltrar dados via canais OOB (Out-of-Band) como DNS ou HTTP para servidor do atacante — mesmo sem retorno visível (Blind XXE).
Exemplo Real de Ataque
POST /api/v1/nfe/importar
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nfe [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<nfeProcNFe>
<infNFe>
<emit><xNome>&xxe;</xNome></emit>
</infNFe>
</nfeProcNFe>
HTTP/1.1 200 OK
{"empresa": "root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:..."}Impacto no Negócio e Compliance
Leitura de arquivos de config com credenciais de banco de dados, chaves de API, certificados privados. Via SSRF chain: comprometimento de metadados cloud. Para aplicações que processam XML de clientes (EDI, NF-e, SOAP, relatórios), qualquer upload de XML é um vetor potencial.
Como Remediar
# ✅ REMEDIAÇÃO: Desabilitar entidades externas no parser XML
import xml.etree.ElementTree as ET
from defusedxml import ElementTree as dET # use defusedxml
# ❌ INSEGURO
tree = ET.fromstring(xml_input)
# ✅ SEGURO — defusedxml bloqueia XXE, Billion Laughs e ataques similares
tree = dET.fromstring(xml_input)
# Java: Desabilitar features no DocumentBuilderFactory
# factory.setFeature("http://xml.org/sax/features/external-general-entities", false)
# factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false)
# factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)Como a Veyronn Detecta Esta Vulnerabilidade
Testamos XXE em todos os endpoints que consomem XML: SOAP, REST com Content-Type xml, upload de documentos (DOCX, SVG, XLSX — todos são XML internamente). Utilizamos payloads OOB com listener externo para detectar Blind XXE.
Vulnerabilidades Relacionadas
Ready to Hire Your Next Pentest?
Acquire our point-in-time assessment performed by top industry professionals or deploy Veyronn's software 24/7.
