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 a 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 com configuração fraca. 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
Ao analisar um documento XML, o aplicativo pode processar todas as definições de tipo de documento (DTDs, 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ó são acessíveis ao aplicativo e podem conter dados sensíveis. Além disso, esse código malicioso pode fazer solicitações do dispositivo, potencialmente 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 é sempre desativar completamente as DTDs (entidades externas). Dependendo do analisador em uso, o método pode ser semelhante ao exemplo abaixo 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)
A desativação de DTDs também protege o analisador contra ataques de negação de serviço. Se não for possível desativar completamente os DTDs, as entidades externas e as declarações de tipo de documento externo 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 acordo com o mecanismo. Talvez seja necessário consultar a documentação do mecanismo para mais informações.
Realizar 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 servidor, porque os controles do lado do cliente podem ser ignorados.
Usar uma biblioteca diferente
Se a biblioteca ou o método usado não puder ser configurado de maneira segura, considere usar outro. O analisador de extração XML e o analisador SAX podem ser configurados de maneira segura, impedindo DTDs e entidades.
Recursos
- OWASP XXE (em inglês)
- Folha de referência de prevenção de XXE do OWASP
- Constantes de XML: FEATURE_SECURE_PROCESSING
- Parâmetro de extração de XML
- SAX Parser