XML External Entity es una vulnerabilidad presente en las aplicaciones que analizan entradas XML.
Por ejemplo, si un parser de XML acepta entidades externas (un tipo de entidad personalizada cuyos valores específicos se cargan desde los archivos DTD en los que están escritos), un atacante puede intervenir su contenido para leer archivos del file system o efectuar ataques como un Server Side Request Forgery (SSRF), entre otros.
Si un atacante lograra explotar esta vulnerabilidad esto puede derivar en riesgos como:
- Robo de datos sensibles (como usuarios y contraseñas)
- Falsificación de solicitudes del lado del servidor.
- Denegación de servicio (ataque en el que se inhabilita el uso de un sistema, aplicación o dispositivo con el fin de que no esté disponible para los usuarios previstos).
Incluso, en algunos escenarios, el atacante podría escalar el ataque para comprometer componentes como el servidor.
Hackmetrix Insight: Si quieres conocer más especificaciones acerca de esta vulnerabilidad, consulta su ficha en la CWE. Common Weakness Enumeration (CWE) es el sistema que enumera y categoriza las debilidades y vulnerabilidades comunes en los software y hardware.
Cómo detectar una XXE (XML External Entity) en una aplicación
Una entidad o entity es una funcionalidad legítima de XML, sin embargo, puede derivar en una vulnerabilidad si el parser analiza entities de una fuente poco confiable como la de un agente malicioso.
Supongamos una aplicación que procesa entidades XML. Si analizamos las solicitudes enviadas por la plataforma, en algunos casos vamos a ver símbolos y caracteres. Estos son algunos ejemplos:
Estos caracteres conforman las entidades, y es lo que obtendremos en texto plano luego de que sean procesados.
Veamos el ejemplo en una aplicación:
1. En el siguiente modelo podremos ver una solicitud HTTP realizada por una aplicación que procesa entidades XML:
2. Si un atacante reemplaza el path del file inclusion por una consulta sobre el archivo / e t c / p a s s w d
3. Finalmente, el backend responderá con la información solicitada. Y el atacante obtendrá información útil sobre las cuentas de usuario.
Cómo se ve la vulnerabilidad XXE en el código
Ejemplo en código PHP:
En la línea 3 se llama a la función file_get_contents que transmite el contenido de un archivo. En este caso, tiene como valor asignado el input que otorgó el usuario: (‘php://input’)
A este valor otorgado por el usuario se asigna a la variable $xmlfile y, en la línea 5, finalmente, esa variable es parseada por el xml sin sanitización previa.
Solución
Asigna true como valor en la función libxml_disable_entity_loader, así se deshabilitará la opción de cargar entidades externas y podrás impedir inyecciones XML.
Tips para remediar un XXE
En resúmen, para remediar esta vulnerabilidad debemos tener en cuenta los siguientes métodos:
- Deshabilitar el procesamiento de definición del tipo de documento (DTD) y entidades externas XML de la aplicación.
- Asegurar que los archivos filtrados no contengan ningún tipo de información crítica o relevante, implementando la validación positiva (“whitelisting”) de la entrada del lado del servidor, el filtrado o la sanitización
- Utilizar formatos de datos menos complejos como JSON y evitar la serialización de datos sensibles siempre que sea posible.
- Parchear o actualizar todos los procesadores y bibliotecas XML que son utilizados por el aplicativo.
- Verificar que la funcionalidad de carga de archivos XML o XSL valida el XML entrante.
Un pentest nunca está de más
Los casos en los que puede aparecer esta vulnerabilidad son diversos y, hasta la fecha, no existe una herramienta automatizada que permita detectarla.
Desafortunadamente, la vulnerabilidad XXE no es la única podría amenazar tu plataforma, por lo tanto, es recomendable hacer un ejercicio de ethical hacking (del tipo penetration testing, pruebas de intrusión o pentest) periódicamente para detectar estas vulnerabilidades y otras fallas de seguridad que pudieran estar presentes tanto en la aplicación como en las redes de tu empresa.
En Hackmetrix contamos con un equipo especializado que te ayudará a poder detectar estas fallas y prevenir que futuros agentes maliciosos se aprovechen de ellas.
Conclusión
La vulnerabilidad XXE (XML External Entity) puede brindar desde información sensible que debiera estar protegida, hasta el control de tus sistemas a un agente malicioso.
Prevenir este tipo de vulnerabilidades en nuestros sistemas es de suma importancia ya que este hecho podría afectar la imagen de la organización implicada, como también significar pérdidas económicas.
Por otra parte, detectar esta vulnerabilidad requiere del esfuerzo de una persona calificada que analice, evalúe e interprete la información. Por esto último, es recomendable realizar pruebas de intrusión periódicas para detectarlas de forma temprana.
Aún así, ahora conoces los métodos de remediación que te ayudarán a resolver este tipo de errores y a tenerlos en cuenta en el desarrollo de tus proyectos.
Referencias
2. https://depthsecurity.com/blog/exploitation-xml-external-entity-xxe-injection