XML eXternal Entity (XXE)

09:11 Daniel Fest 0 Comentarios



O Ataque XXE é um tipo específico de Server-Side Request Forgery (SSRF) e acontece quando uma request utilizando XML é tratada de forma insegura, possibilitando assim a queda do serviço e/ou o acesso direto aos arquivos e informações do servidor, entre outros impactos. Isso acontece quando a informação recebida pelo servidor, contendo referência a uma entidade externa, é processada de forma insegura.
Uma das formas mais comuns de exploração é o caso de campos de upload de arquivo, em que o arquivo importado tem efeito direto na aplicação. É importante ressaltar que arquivos com outras extensões como docx, pptx, pdf, entre outros, também possuem dados em XML em sua construção. Logo, o ataque não se limita apenas à passagem simples de dados em XML nas request ou apenas a arquivos de extensão .xml.
Uma das características do XML é permitir que o desenvolvedor referencie dados armazenados local ou remotamente a um dado endereço.
Os códigos abaixo, por exemplo, possibilitam o acesso ao arquivo passwd e lsb-release respectivamente.
      <?xml version="1.0" encoding="ISO-8859-1"?>
      <!DOCTYPE foo [
       <!ELEMENT foo ANY >
       <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>

POST http://example.com/xml HTTP/1.1

      <!DOCTYPE foo [
      <!ELEMENT foo ANY>
      <!ENTITY bar SYSTEM "file:///etc/lsb-release">
]>
<foo>
&bar;
</foo>

O modo mais seguro de prevenir o XXE é desabilitando o seu uso completamente. Quando não é possível desabilitar o recurso, entidades externas e declarações de tipo de documento externo devem ser desativadas de maneira específica para cada parser.

Tratativas:
Em alguns casos, a tratativa não é tão simples, devido a problemas nas bibliotecas que realizam o parse do XML.
Em códigos PHP, por exemplo, habilitar a libxml_disable_entity_loader mitiga este tipo de problema.
Aplicações em Java que utilizam bibliotecas XML costumam ser vulneráveis por possibilitarem de forma padrão o uso de entidades externas. É necessário desativá-las.
Em C/C++, para a biblioteca libxml2, as opções XML_PARSE_NOENT e XML_PARSE_DTDLOAD não devem ser definidas.
Para estas e outras opções de mitigações em outras linguagens, recomendamos a leitura da OWASP: https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet

Conclusão
A vulnerabilidade apresentada é simples, mas seu risco é muito alto. Hoje, muitas bibliotecas que utilizam XML para leitura de dados já possuem seus meios de mitigação, mas ainda assim, desenvolvedores desavisados podem deixar passar este recurso e possibilitar sua exploração.

Referências
https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing
https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet
https://www.infosec.com.br/xml-external-entity/
https://www.acunetix.com/blog/articles/xml-external-entity-xxe-vulnerabilities/
https://resources.infosecinstitute.com/xxe-attacks/#gref
https://www.bugcrowd.com/advice-from-a-bug-hunter-xxe/
https://depthsecurity.com/blog/exploitation-xml-external-entity-xxe-injection

0 comentários: