
En este artículo explicaremos qué es la inyección de entidades XML externas, describiremos algunos ejemplos comunes, explicaremos cómo encontrar y usar diferentes tipos de inyecciones XXE y también generalizaremos cómo prevenir ataques con su ayuda.
¿Qué es una inyección de entidades XML externas?
Inyectar entidades XML externas (también conocido como XXE) es una vulnerabilidad de seguridad web que podría permitir que un atacante interfiera con el procesamiento de datos XML por parte 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 servidor o sistema externo al que pueda acceder la aplicación.
En algunas situaciones, un atacante podría aprovechar un ataque XXE para comprometer un servidor central u otra infraestructura interna explotando la vulnerabilidad XXE para realizar ataques de falsificación de solicitudes del lado del servidor (SSRF).
¿Cómo surgen las vulnerabilidades XXE?
Algunas aplicaciones usan el formato XML para transferir datos entre el navegador y el servidor. Las aplicaciones que hacen esto casi siempre usan la biblioteca estándar o las API de plataforma para procesar 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 utiliza habitualmente.
Las entidades externas XML son un tipo de entidad XML personalizada cuyos valores específicos se cargan desde los archivos DTD en los que están escritos. Las entidades externas son particularmente interesantes desde el punto de vista de la seguridad, ya que le permiten definir una entidad en función del contenido de una ruta de archivo o URL.
¿Qué tipos de ataques XXE existen?
- Usando XXE para extraer archivos, donde una entidad externa que incluye el contenido del archivo se determina y devuelve en la respuesta de la aplicación.
- Usar XXE para realizar ataques SSRF, donde se determina una entidad externa en función de la URL del sistema interno.
- Utilizando la extracción ciega de información XXE en el canal de control, donde los datos confidenciales se transfieren desde el servidor de aplicaciones al sistema controlado por el atacante.
- Uso de blind XXE para devolver datos de mensajes de error cuando un atacante puede activar un mensaje de error que contiene la información necesaria.
- Usando XXE para extraer archivos
Para realizar un ataque de la inyección de formulario XXE, que extrae un archivo arbitrario del sistema de archivos del servidor, debe modificar el XML presentado de una de dos maneras:
- Ingrese (o modifique) el elemento DOCTYPE que define la entidad externa que contiene la ruta del archivo.
- Cambie el valor de los datos en XML devueltos en la respuesta de la aplicación para usar una entidad externa específica.
Por ejemplo, suponga que una aplicación de compras verifica la cantidad de existencias de productos enviando el siguiente XML al servidor:
<?xml version="1.0" encoding="UTF-8"?> <stockCheck><productId>381</productId></stockCheck> XXE, XXE /etc/passwd, XXE: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <stockCheck><productId>&xxe;</productId></stockCheck>
Esta estructura XXE define una entidad externa & xxe, cuyo valor es el contenido del archivo / etc / passwd, y utiliza una entidad con el 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 ...
En el caso de vulnerabilidades reales de XXE, a menudo habrá una gran cantidad de valores de datos en el XML enviado, cualquiera de los cuales se puede usar en la respuesta de la aplicación. Para las pruebas sistemáticas de vulnerabilidades XXE, como regla general, será necesario verificar cada nodo de datos en XML individualmente, utilizando una entidad específica y ver el estado de la respuesta.
Además de extraer datos confidenciales, otra forma de usar ataques XXE es usarlos para falsificar solicitudes del lado del servidor (SSRF).
Esta es una vulnerabilidad potencialmente grave; con su ayuda, la aplicación del servidor se puede utilizar para ejecutar solicitudes HTTP a cualquier URL a la que pueda acceder el servidor.
Para utilizar la vulnerabilidad XXE para realizar un ataque SSRF, debe definir una entidad XML externa utilizando la URL a la que desea acceder y utilizar una entidad específica con un valor de datos. Si puede utilizar una entidad específica con el valor de los datos devueltos en la respuesta de la aplicación, puede ver la respuesta de la URL en la respuesta de la aplicación y así obtener una interacción bidireccional con el sistema del servidor. Si no, solo puede realizar ataques SSRF ciegos (que también pueden tener consecuencias críticas).
En el siguiente ejemplo con XXE, una entidad externa obliga al servidor a ejecutar una solicitud HTTP interna al sistema interno dentro de la infraestructura del sistema:
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]>
Usando XXE para realizar ataques SSRF:
Muchos tipos de vulnerabilidades XXE son ciegos. Esto significa que la aplicación no devuelve el valor de ninguna entidad externa específica en sus respuestas y, por lo tanto, la búsqueda directa de archivos en el lado del servidor es imposible.
Las vulnerabilidades ciegas XXE aún se pueden detectar y explotar, pero se requieren métodos más avanzados. A veces puede usar métodos externos para buscar vulnerabilidades y usarlos para filtrar datos. A veces también puede causar errores de análisis XML que dan como resultado la divulgación de datos confidenciales en mensajes de error.
Búsqueda y uso de vulnerabilidades ciegas XXE:
La capacidad de atacar con una inyección XXE es obvia en muchos casos, ya que el tráfico HTTP normal de la aplicación incluye solicitudes que contienen datos XML. En otros casos, la capacidad de ataque es menos notable. Sin embargo, si busca en los lugares correctos, encontrará la oportunidad de un ataque XXE en consultas que no contienen XML.
XIncluir ataques
Algunas aplicaciones reciben datos enviados por el cliente, los insertan en el lado del servidor en un documento XML y luego los analizan. Un ejemplo de esto es cuando los datos del cliente se colocan en una solicitud de backend SOAP, que luego es procesada por el servicio de backend SOAP.
En este caso, no puede ejecutar el ataque XXE clásico porque no tiene el control de todo el documento XML y, por lo tanto, no puede determinar ni modificar el elemento DOCTYPE. Sin embargo, puede usar XInclude en su lugar. XInclude es parte de la especificación XML, que le permite crear un documento XML a partir de documentos anidados. Puede colocar un ataque XInclude en cualquier valor de datos en un documento XML, por lo que el ataque se puede realizar en situaciones en las que controle solo un elemento de datos colocado en un documento XML en el lado del servidor.
Para realizar un ataque XInclude, debe hacer referencia al espacio de nombres XInclude y especificar la ruta al archivo que desea involucrar. Por ejemplo:
<foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/></foo>
Algunas aplicaciones permiten a los usuarios cargar archivos, que luego se procesan en el lado del servidor. Algunos formatos de archivo comunes usan XML o contienen subcomponentes XML. Ejemplos de formatos XML son formatos de documentos de Office como DOCX y formatos de imagen como SVG.
Por ejemplo, una aplicación puede permitir a los usuarios cargar imágenes y procesarlas o verificarlas en el servidor después de la descarga. Incluso si la aplicación espera recibir formato PNG o JPEG, la biblioteca de procesamiento de imágenes utilizada puede admitir imágenes SVG. Dado que el formato SVG usa XML, un atacante podría enviar una imagen SVG maliciosa y así poder atacar vulnerabilidades XXE.
Usando XXE cargando archivos de imagen:
La mayoría de las solicitudes POST utilizan el tipo de contenido predeterminado creado por los formularios HTML, como application / x-www-form-urlencoded. Algunos sitios esperan recibir solicitudes en este formato, pero permiten otros tipos de contenido, incluido XML.
Por ejemplo, si una solicitud regular contiene lo siguiente:
POST /action HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 7 foo=bar : POST /action HTTP/1.0 Content-Type: text/xml Content-Length: 52 <?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
Si una aplicación acepta solicitudes que contienen XML en el cuerpo del mensaje y analiza el contenido como XML, puede tener la oportunidad de atacar a XXE simplemente formateando las solicitudes para usar el formato XML.
Cómo encontrar y verificar 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 Burp Suite.
- Las pruebas manuales de vulnerabilidades XXE generalmente incluyen:
- Probar la extracción de archivos definiendo una entidad externa basada en un archivo conocido del sistema operativo y utilizando este objeto en los datos devueltos en la respuesta de la aplicación.
- Probar vulnerabilidades ciegas XXE definiendo una entidad externa basada en la URL del sistema que está administrando y monitoreando la interacción con este sistema. El cliente Burp Collaborator es ideal para este propósito.
- Prueba de inclusión vulnerable de datos de usuario que no son XML en un documento de servidor XML utilizando un ataque XInclude para intentar obtener un archivo conocido del sistema operativo.
Cómo prevenir vulnerabilidades XXE
Casi todas las vulnerabilidades XXE surgen porque la biblioteca de análisis de aplicaciones XML admite funciones XML potencialmente peligrosas que la aplicación no necesita o no está destinada a usar. La forma más fácil y efectiva de prevenir ataques XXE es deshabilitar estas funciones.
Como regla, es suficiente deshabilitar la resolución de entidades externas y deshabilitar el soporte XInclude. Esto generalmente se puede hacer utilizando las opciones de configuración o anulando mediante programación el comportamiento predeterminado. Para obtener más información sobre cómo deshabilitar características innecesarias, consulte la documentación de la biblioteca de análisis XML o API.
Puede utilizar
laboratorios especializados como campo de entrenamiento para probar las habilidades de explotación de tales vulnerabilidades.
Las últimas configuraciones de doble procesador de servidores dedicados con procesadores escalables Intel 2019 están disponibles en
DEDIC.SH :
- 2x Xeon Silver 4214: un total de 24 núcleos
- 2x Xeon Gold 5218 - un total de 32 núcleos
- 2x Xeon Gold 6240 - configuración con 36 núcleos.
El costo de un servidor con dos Xeon Silver 4214 -
desde 15210 rublos / mesTambién estamos listos para recopilar
cualquier configuración para usted, ¡
escríbanos !
Si no se requieren grandes potencias de un servidor dedicado, ¡
VDS desde 150 rublos / mes es lo que necesita!