Categoría de OWASP: MASVS-CODE: Calidad de código
Descripción general
Una inyección de entidad externa XML (XXE) es un ataque contra aplicaciones que analizan la entrada XML. Un ataque XXE se produce cuando un analizador XML con una configuración débil procesa una entrada XML no confiable con una referencia a una entidad externa. Este ataque se puede usar para organizar varios incidentes, como la denegación de servicio, el acceso al sistema de archivos o el robo de datos.
Impacto
Cuando una aplicación analiza un documento XML, puede procesar cualquier DTD (definiciones de tipo de documento, también conocidas como entidades externas) que contenga el documento. Un atacante puede aprovechar este comportamiento inyectando código malicioso como DTD. Luego, este código puede acceder a partes del sistema de archivos del dispositivo, que solo son accesibles para la aplicación y que pueden contener datos sensibles. Además, este código malicioso puede realizar solicitudes desde el dispositivo, lo que podría eludir las medidas de seguridad del perímetro.
Por último, si la aplicación expande los DTD, esto puede crear una situación con varias iteraciones de entidades a las que se hace referencia, lo que agota los recursos del dispositivo y provoca una denegación de servicio.
Mitigaciones
Inhabilita los DTD
La forma más segura de evitar las XXE es inhabilitar siempre las DTD (entidades externas) por completo. Según el analizador que se use, el método podría ser similar al siguiente ejemplo para la biblioteca de 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)
Inhabilitar los DTD también hace que el analizador sea seguro contra los ataques de denegación de servicio. Si no es posible inhabilitar las DTD por completo, se deben inhabilitar las entidades externas y las declaraciones de tipo de documento externas de una manera específica para cada analizador.
Debido a la gran cantidad de motores de análisis de XML en el mercado, las formas de evitar los ataques XXE difieren de un motor a otro. Es posible que debas consultar la documentación del motor para obtener más información.
Realiza la limpieza de entradas
La aplicación se debe volver a configurar para que no permita que los usuarios inserten código arbitrario en el preámbulo del documento XML. Esto se debe verificar del lado del servidor, ya que se pueden omitir los controles del cliente.
Usar otra biblioteca
Si la biblioteca o el método que se usa no se pueden configurar de forma segura, se debe considerar usar otro. XML Pull Parser y SAX Parser se pueden configurar de forma segura, lo que inhabilita las DTD y las entidades.
Recursos
- OWASP XXE
- Hoja de referencia para la prevención de XXE de OWASP
- Constantes de XML: FEATURE_SECURE_PROCESSING
- Analizador de extracción de XML
- Analizador SAX