XXE (XML External Entity)

O que é XML?

  • XML (Extensible Markup Language): Uma linguagem de marcação projetada para armazenar e transportar dados.

  • Possui uma estrutura de árvore hierárquica e utiliza tags definidas pelo usuário (semelhante ao HTML).

DTD (Document Type Definition)

  • O DTD define a estrutura e os elementos permitidos em um documento XML.

  • Ele é declarado no início do arquivo XML, dentro da tag <!DOCTYPE>.

XML Entities

  • São “variáveis” que podem ser definidas dentro do DTD para serem reutilizadas no documento.

  • Exemplo de Entidade Interna: <!ENTITY myentity "valor">

  • Exemplo de Entidade Externa: <!ENTITY xxe SYSTEM "file:///etc/passwd">


A Vulnerabilidade XXE

A injeção de entidade externa XML (XXE) ocorre quando uma aplicação web processa um input XML que contém uma referência a uma entidade externa, e essa entidade é processada de forma insegura pelo parser de XML do servidor.

Impactos e Exploração

1. Recuperação de Arquivos (File Retrieval)

O atacante define uma entidade externa que aponta para um arquivo sensível no sistema de arquivos do servidor.

  • Payload de exemplo:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [  
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<stockCheck>
  <productId>&xxe;</productId>
</stockCheck>

2. SSRF via XXE

O atacante utiliza a entidade externa para forçar o servidor a fazer uma requisição HTTP para um sistema interno ou externo.

  • Payload de exemplo:
<!DOCTYPE test [ 
  <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/"> 
]>

3. Exfiltração de Dados Out-of-Band (OAST)

Utilizado quando a aplicação não retorna o valor da entidade injetada diretamente na resposta. O atacante faz o servidor enviar os dados para um servidor externo sob seu controle.

Como Prevenir

  • Desativar DTDs: A forma mais segura é configurar o parser de XML para desabilitar completamente o processamento de DTDs (Document Type Definitions) e entidades externas.

  • Usar Formatos Menos Complexos: Sempre que possível, substituir o uso de XML por formatos de dados mais simples e menos propensos a esse tipo de ataque, como o JSON.

  • Atualizar Bibliotecas: Garantir que as bibliotecas de processamento de XML estejam atualizadas, pois muitas versões modernas já vêm com proteções contra XXE ativadas por padrão.