
En esta sección, explicaremos qué es la inyección de entidades externas XML, describiremos algunos ejemplos comunes, explicaremos cómo encontrar y explotar varios tipos de inyección XXE y resumiremos cómo prevenir los ataques de inyección XXE
¿Qué es la inyección de entidad externa XML?
La inyección de entidad externa XML (también conocida como XXE) es una vulnerabilidad de seguridad web que permite a un atacante interferir con el procesamiento de datos XML de una aplicación. A menudo, permite que un atacante vea archivos en el sistema de archivos del servidor de aplicaciones e interactúe con cualquier sistema externo o de back-end al que pueda acceder la propia aplicación.
En algunas situaciones, un atacante puede escalar un ataque XXE para comprometer el servidor subyacente u otra infraestructura de back-end, aprovechando la vulnerabilidad XXE para realizar ataques de falsificación de solicitud del lado del servidor (SSRF).
¿Cómo surgen las vulnerabilidades XXE?
Algunas aplicaciones utilizan el formato XML para transmitir datos entre el navegador y el servidor. Las aplicaciones que hacen esto casi siempre usan una API de plataforma o biblioteca estándar para procesar los datos XML en el servidor. Las vulnerabilidades XXE surgen porque la especificación XML contiene varias funciones potencialmente peligrosas, y los analizadores estándar admiten estas funciones incluso si la aplicación no las usa normalmente.
Las entidades externas XML son un tipo de entidad XML personalizada cuyos valores definidos se cargan desde fuera de la DTD en la que se declaran. Las entidades externas son particularmente interesantes desde una perspectiva de seguridad porque permiten definir una entidad en función del contenido de una ruta de archivo o URL.
¿Cuáles son los tipos de ataques XXE?
Hay varios tipos de ataques XXE:
- Explotación de XXE para recuperar archivos, donde se define una entidad externa que contiene el contenido de un archivo y se devuelve en la respuesta de la aplicación.
- Explotación de XXE para realizar ataques SSRF, donde una entidad externa se define en función de una URL a un sistema de back-end.
- Explotación de datos de exfiltración ciegos XXE fuera de banda, donde los datos confidenciales se transmiten desde el servidor de aplicaciones a un sistema que controla el atacante.
- Explotar XXE ciego para recuperar datos a través de mensajes de error, donde el atacante puede activar un mensaje de error de análisis que contiene datos confidenciales.
Explotando XXE para recuperar archivos
Para realizar un ataque de inyección XXE que recupera un archivo arbitrario del sistema de archivos del servidor, debe modificar el XML enviado de dos maneras:
- Introduzca (o edite) un elemento
DOCTYPE
que defina una entidad externa que contenga la ruta al archivo. - Edite un valor de datos en el XML que se devuelve en la respuesta de la aplicación, para hacer uso de la entidad externa definida.
Por ejemplo, supongamos que una aplicación de compras comprueba el nivel de existencias de un producto enviando el siguiente XML al servidor:
<?xml version="1.0" encoding="UTF-8"?>
<stockCheck><productId>381</productId></stockCheck>
<stockCheck><productId>381</productId></stockCheck>
La aplicación no realiza defensas particulares contra los ataques XXE, por lo que puede aprovechar la vulnerabilidad XXE para recuperar el /etc/passwd
archivo enviando la siguiente carga útil XXE:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>
Esta carga útil XXE define una entidad externa &xxe;
cuyo valor es el contenido del archivo /etc/passwd
y utiliza la entidad dentro del valor productId
. Esto hace que la respuesta de la aplicación incluya el contenido del archivo:
Invalid product ID: root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
Solicita una cotización del mejor escaner de vulnerabilidades de sitios web y aplicativos expuestos, con precios por anualidad e intercambio de targets, BURP SUITE ENTERPRISE es el único que lo ofrece, cambia YA!
Explotación de XXE para realizar ataques SSRF
Además de la recuperación de datos confidenciales, el otro impacto principal de los ataques XXE es que pueden usarse para realizar una falsificación de solicitudes del lado del servidor (SSRF). Esta es una vulnerabilidad potencialmente grave en la que se puede inducir a la aplicación del lado del servidor a realizar solicitudes HTTP a cualquier URL a la que el servidor pueda acceder.
Para explotar una vulnerabilidad XXE para realizar un ataque SSRF , debe definir una entidad XML externa utilizando la URL a la que desea apuntar y utilizar la entidad definida dentro de un valor de datos. Si puede usar la entidad definida dentro de un valor de datos que se devuelve en la respuesta de la aplicación, podrá ver la respuesta desde la URL dentro de la respuesta de la aplicación y, por lo tanto, obtener una interacción bidireccional con el sistema de back-end. De lo contrario, solo podrá realizar ataques ciegos SSRF (que aún pueden tener consecuencias críticas).
En el siguiente ejemplo XXE, la entidad externa hará que el servidor realice una solicitud HTTP de back-end a un sistema interno dentro de la infraestructura de la organización:
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]>
Vulnerabilidades ciegas XXE
Muchas instancias de vulnerabilidades XXE son ciegas. Esto significa que la aplicación no devuelve los valores de ninguna entidad externa definida en sus respuestas, por lo que no es posible la recuperación directa de archivos del lado del servidor.
Las vulnerabilidades ciegas XXE aún se pueden detectar y explotar, pero se requieren técnicas más avanzadas. A veces, puede usar técnicas fuera de banda para encontrar vulnerabilidades y explotarlas para filtrar datos. Y a veces puede desencadenar errores de análisis de XML que conducen a la divulgación de datos confidenciales dentro de los mensajes de error.
Encontrar una superficie de ataque oculta para la inyección XXE
La superficie de ataque para las vulnerabilidades de inyección XXE es obvia en muchos casos, porque el tráfico HTTP normal de la aplicación incluye solicitudes que contienen datos en formato XML. En otros casos, la superficie de ataque es menos visible. Sin embargo, si busca en los lugares correctos, encontrará superficie de ataque XXE en solicitudes que no contienen ningún XML.
Ataques XInclude
Algunas aplicaciones reciben datos enviados por el cliente, los incrustan en el lado del servidor en un documento XML y luego analizan el documento. Un ejemplo de esto ocurre cuando los datos enviados por el cliente se colocan en una solicitud SOAP de back-end, que luego es procesada por el servicio SOAP de back-end.
En esta situación, no puede realizar un ataque XXE clásico, porque no controla todo el documento XML y, por lo tanto, no puede definir ni modificar un DOCTYPE
elemento. Sin embargo, es posible que pueda usar en su XInclude
lugar. XInclude
es una parte de la especificación XML que permite crear un documento XML a partir de subdocumentos. Puede colocar un XInclude
ataque dentro de cualquier valor de datos en un documento XML, por lo que el ataque se puede realizar en situaciones en las que solo controla un único elemento de datos que se coloca en un documento XML del lado del servidor.
Para realizar un XInclude
ataque, debe hacer referencia al espacio de XInclude
nombres y proporcionar la ruta al archivo que desea incluir. Por ejemplo:
<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>
Ataques XXE a través de la carga de archivos
Algunas aplicaciones permiten a los usuarios cargar archivos que luego se procesan en el servidor. Algunos formatos de archivo comunes usan XML o contienen subcomponentes XML. Ejemplos de formatos basados en XML son formatos de documentos de oficina como DOCX y formatos de imagen como SVG.
Por ejemplo, una aplicación podría permitir a los usuarios cargar imágenes y procesarlas o validarlas en el servidor después de cargarlas. Incluso si la aplicación espera recibir un formato como PNG o JPEG, la biblioteca de procesamiento de imágenes que se utiliza puede admitir imágenes SVG. Dado que el formato SVG usa XML, un atacante puede enviar una imagen SVG maliciosa y así alcanzar la superficie de ataque oculta para las vulnerabilidades XXE.
Ataques XXE a través del tipo de contenido modificado
La mayoría de las solicitudes POST utilizan un tipo de contenido predeterminado generado por formularios HTML, como application/x-www-form-urlencoded
. Algunos sitios web esperan recibir solicitudes en este formato, pero tolerarán otros tipos de contenido, incluido XML.
Por ejemplo, si una solicitud normal contiene lo siguiente:
POST /action HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 7 foo=bar
Entonces es posible que pueda enviar la siguiente solicitud, con el mismo resultado:
POST /action HTTP/1.0
Content-Type: text/xml
Content-Length: 52 <?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
Si la aplicación tolera solicitudes que contienen XML en el cuerpo del mensaje y analiza el contenido del cuerpo como XML, puede llegar a la superficie de ataque XXE oculta simplemente reformateando las solicitudes para usar el formato XML.
Cómo encontrar y probar vulnerabilidades XXE
La gran mayoría de las vulnerabilidades XXE se pueden encontrar de manera rápida y confiable utilizando el escáner de vulnerabilidades web de Burp Suite .
La prueba manual de vulnerabilidades XXE generalmente implica:
- Probar la recuperación de archivos mediante la definición de una entidad externa basada en un archivo de sistema operativo conocido y el uso de esa entidad en los datos que se devuelven en la respuesta de la aplicación.
- Probar vulnerabilidades XXE ciegas definiendo una entidad externa basada en una URL a un sistema que usted controla y monitoreando las interacciones con ese sistema. El cliente de Burp Collaborator es perfecto para este propósito.
- Prueba de inclusión vulnerable de datos no XML proporcionados por el usuario dentro de un documento XML del lado del servidor mediante un ataque XInclude para intentar recuperar un archivo de sistema operativo conocido.
Cómo prevenir vulnerabilidades XXE
Prácticamente todas las vulnerabilidades XXE surgen porque la biblioteca de análisis XML de la aplicación admite funciones XML potencialmente peligrosas que la aplicación no necesita ni pretende usar. La forma más fácil y efectiva de prevenir los ataques XXE es deshabilitar esas funciones.
Generalmente, es suficiente deshabilitar la resolución de entidades externas y deshabilitar el soporte para XInclude
. Por lo general, esto se puede hacer a través de las opciones de configuración o anulando mediante programación el comportamiento predeterminado. Consulte la documentación de su biblioteca de análisis XML o API para obtener detalles sobre cómo deshabilitar capacidades innecesarias.
Accion
Encuentre vulnerabilidades XXE utilizando el escáner de vulnerabilidades web de Burp Suite
Si te ha gustado, ¡compártelo con tus amigos!
Por favor déjanos saber qué piensas sobre este artículo
¿Cómo calificarías este contenido?
Promedio de puntuación 0 / 5. Recuento de votos: 0
Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.