XXE
🔎 ¿Qué es?
La vulnerabilidad XXE aparece cuando una aplicación que procesa XML no desactiva entidades externas, permitiendo que un atacante inserte código malicioso dentro del documento XML.
👉 Esto puede usarse para leer archivos internos, exfiltrar datos o realizar SSRF.
⚙️ Flujo de la vulnerabilidad
[Atacante]
|
| Envía XML malicioso con DOCTYPE y ENTITY
↓
[Parser XML vulnerable]
|
| Expande la entidad externa
↓
[Servidor]
|
→ Filtración de archivos o acceso interno
📍 Ejemplo clásico
XML legítimo:
<?xml version="1.0"?>
<user>
<name>Juan</name>
</user>
XML malicioso:
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<user>
<name>&xxe;</name>
</user>
👉 El parser reemplaza &xxe; con el contenido de /etc/passwd.
🚨 Riesgos
-
Lectura de archivos sensibles (
/etc/passwd, claves privadas). -
SSRF a servicios internos (
http://localhost:8080/). -
Denegación de servicio (DoS) con Billion Laughs Attack.
-
Robo de credenciales o tokens de configuración.
🛠️ Cómo detectarlo
-
Pruebas manuales:
-
Inyectar
<!DOCTYPE>y entidades externas. -
Observar si se reflejan o generan errores inusuales.
-
-
Herramientas:
-
Burp Suite(XXE plugin). -
nuclei(templates XXE). -
XXEInjector.
-
-
Indicadores:
-
Errores de parsing.
-
Respuestas que incluyen contenido interno.
-
🛡️ Medidas de prevención
✅ Desactivar la resolución de entidades externas en parsers XML.
✅ Usar librerías modernas que no habiliten entidades por defecto.
✅ Validar el XML contra un schema seguro (XSD).
✅ Evitar usar XML cuando no sea necesario (usar JSON u otros formatos).
✅ Implementar WAF con reglas para detectar XXE.
🎨 Resumen visual
XML External Entity (XXE)
├── Causa: parser XML con entidades externas habilitadas
├── Impacto: lectura de archivos, SSRF, DoS
├── Detección: inyección DOCTYPE + herramientas (Burp, nuclei)
└── Prevención: desactivar entidades externas, usar parsers seguros