Categoria do OWASP: MASVS-CODE - Qualidade do código (link em inglês)
Visão geral
Uma injeção de entidade externa XML (XXE) é um ataque contra aplicativos que analisam entradas XML. Um ataque XXE ocorre quando uma entrada XML não confiável com uma referência a uma entidade externa é processada por um analisador XML mal configurado. Esse ataque pode ser usado para organizar vários incidentes, incluindo negação de serviço, acesso ao sistema de arquivos ou exfiltração de dados.
Impacto
Quando um aplicativo analisa um documento XML, ele pode processar qualquer DTD (definições de tipo de documento, também conhecidas como entidades externas) contidas no documento. Um invasor pode explorar esse comportamento injetando código malicioso como DTDs. Esse código pode acessar partes do sistema de arquivos do dispositivo, que só podem ser acessadas pelo aplicativo e podem conter dados sensíveis. Além disso, esse código malicioso pode fazer solicitações do dispositivo, possivelmente ignorando as medidas de segurança do perímetro.
Por fim, se o aplicativo expandir DTDs, isso pode criar uma situação com várias iterações de entidades referenciadas, esgotando os recursos do dispositivo e levando a uma negação de serviço.
Mitigações
Desativar DTDs
A maneira mais segura de evitar XXE é desativar sempre as DTDs (entidades externas) completamente. Dependendo do analisador em uso, o método pode ser semelhante ao exemplo a seguir para a biblioteca XML Pull Parser:
Java
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
Kotlin
val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
Desativar DTDs também torna o analisador seguro contra ataques de negação de serviço. Se não for possível desativar completamente as DTDs, as entidades externas e as declarações de tipo de documento externas precisarão ser desativadas de uma maneira específica para cada analisador.
Devido ao grande número de mecanismos de análise XML no mercado, as maneiras de evitar ataques XXE variam de um mecanismo para outro. Consulte a documentação do seu mecanismo para mais informações.
Fazer a limpeza de entradas
O aplicativo precisa ser reconfigurado para não permitir que os usuários injetem código arbitrário no preâmbulo do documento XML. Isso precisa ser verificado no lado do servidor, já que os controles do lado do cliente podem ser ignorados.
Usar outra biblioteca
Se a biblioteca ou o método usado não puder ser configurado de maneira segura, considere usar outro. O XML Pull Parser e o SAX Parser podem ser configurados de maneira segura, proibindo DTDs e entidades.
Recursos
- XXE do OWASP
- Folha de referência de prevenção de XXE da OWASP (em inglês)
- Constantes XML: FEATURE_SECURE_PROCESSING
- XML Pull Parser (em inglês)
- Analisador SAX