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

Fluxo de um ataque XXE

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:

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.

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.

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

3️ XInclude Attack

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

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

4 DoS - Ataque Billion Laughs

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

5 SSRF com XXE

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:

Python (lxml):

.NET:

🛠️ 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