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

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.
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)
Existen múltiples variantes de ataques XXE. A continuación, analizamos cada uno con ejemplos y recomendaciones de prueba.
Este es el tipo más clásico de XXE. El atacante define una entidad externa para acceder a un archivo local.
Payload:
Si el parser no está protegido, la aplicación responderá con el contenido del archivo.
Esta variante permite insertar entidades externas como parámetros. Suele utilizarse para evadir filtros básicos.
Payload:
Algunos parsers permiten este tipo de expansión aunque bloqueen la forma básica.
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:
La entidad forzará al servidor a hacer una solicitud HTTP a un servidor controlado por el atacante.
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.
Este es un ataque de denegación de servicio mediante expansión exponencial de entidades internas.
Payload:
El parser entra en bucles de expansión que agotan memoria o CPU.
Similares al ataque anterior, pero basados en referencias recursivas que causan bloqueos o fallos por stack overflow.
Usa estructuras XML legítimas pero profundamente anidadas para provocar denegación de servicio.
El parser tarda demasiado o agota los recursos.
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.
Algunos filtros de seguridad se pueden evadir usando codificaciones alternativas como UTF-16 o UTF-32.
Cambiar la codificación puede permitir que caracteres peligrosos pasen desapercibidos.
Incluir referencias a entidades dentro de bloques CDATA puede evadir filtros simples.
Crear entidades personalizadas con referencias externas es útil para análisis y evasión.
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.
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.
Algunas aplicaciones solo evalúan ciertas rutas o métodos. Es importante probar con:
POST
PUT
PATCH
Servicios como SOAP o XML-RPC son blancos ideales. Aunque sean antiguos, siguen muy presentes en entornos empresariales.
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.
Desactivar la resolución de entidades externas en el parser XML.
Validar el esquema XML y restringir el uso de DOCTYPE.
Aplicar whitelisting para inputs estructurados.
Monitorear tráfico saliente para detectar solicitudes OOB.
Usar bibliotecas seguras: algunas como defusedxml en Python están diseñadas para resistir XXE.
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