XXE (XML External Entity)
🌐 Vulnerabilidad: XML External Entity (XXE)
🕵️♂️ ¿Qué es XXE?
XML External Entity (XXE) es una vulnerabilidad que afecta aplicaciones que procesan datos XML. Ocurre cuando una aplicación permite incluir referencias a entidades externas dentro de un documento XML, lo que puede ser explotado por un atacante para:
Acceder a archivos locales del servidor.
Realizar ataques SSRF (Server-Side Request Forgery).
Filtrar información confidencial.
En casos extremos, ejecutar código remoto o causar una denegación de servicio (DoS).
⚙️ ¿Cómo se produce?
Cuando una aplicación no deshabilita las entidades externas al procesar XML, un atacante puede inyectar una referencia maliciosa en un documento XML enviado al servidor.
🛠️ Mecanismo de ataque
Ejemplo de archivo XML malicioso:
Paso 1: El atacante envía este documento XML al servidor.
Paso 2: Si el servidor no está configurado correctamente, resolverá la entidad
&xxe;
y devolverá el contenido del archivo/etc/passwd
al atacante.Paso 3: El atacante obtiene acceso a datos sensibles.
🎯 Impacto
Exposición de archivos locales: Como contraseñas, claves privadas o configuraciones.
Ataques SSRF: Manipulación para que el servidor realice solicitudes a servicios internos o externos.
Denegación de servicio (DoS): Uso de entidades recursivas para consumir recursos del servidor.
Ejecución remota de código (RCE): En algunos casos, puede permitir la ejecución de comandos.
📉 Puntaje CVSS v3
Vector de ataque: Red (se explota remotamente)
Complejidad del ataque: Baja
Impacto en la confidencialidad: Alto
Impacto en la integridad: Medio
Impacto en la disponibilidad: Bajo a alto (dependiendo del ataque)
Puntaje CVSS v3: 7.5 - 9.0 (Crítico) 🔥
🧑💻 Ejemplo práctico
Código vulnerable en PHP (procesamiento XML):
Solicitud de ataque:
📌 Si no se deshabilitan las entidades externas, el servidor devolverá el contenido del archivo /etc/passwd
.
🛡️ ¿Cómo prevenir XXE?
1️⃣ Deshabilitar entidades externas
Configura las bibliotecas XML para deshabilitar la carga de entidades externas:
En PHP:
2️⃣ Validación del formato del XML
Valida el XML recibido para asegurarte de que no incluya referencias a entidades externas.
3️⃣ Usar bibliotecas seguras
Utiliza bibliotecas modernas que no permiten el procesamiento de entidades externas por defecto:
Python: Usa
defusedxml
en lugar dexml.etree.ElementTree
.Java: Configura
DocumentBuilderFactory
para deshabilitar DTD:
4️⃣ Uso de herramientas de validación
Implementa WAF (Web Application Firewall) o herramientas de validación que bloqueen contenido XML malicioso.
5️⃣ Evitar procesamiento innecesario
Si no es necesario procesar entradas XML, evita habilitar funcionalidades relacionadas con XML.
💡 Dato extra: Aunque XXE está clasificado en el OWASP Top 10, la mayoría de las vulnerabilidades pueden prevenirse simplemente configurando adecuadamente las bibliotecas XML.
🚨 Nota importante: XXE no solo compromete la confidencialidad del servidor, sino que puede ser utilizado como un pivote para acceder a redes internas.
Última actualización
¿Te fue útil?