Post

XXE External Entity Attack

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
    1. O sistema espera uma entrada limpa e segura
    2. 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>
    
  1. Ocorre o processamento
  2. 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

  1. 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.
  2. Desativar entidades externas: Instruímo o processador a ignorar PUBLIC ou SYSTEM. Seria como nossos pais falavam: “Não aceite bombom de estranhos”
  3. Desativar DTD: Caso sua aplicação não utilize.
  4. 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

This post is licensed under CC BY 4.0 by the author.

Trending Tags