August 27, 2025

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

  1. Pruebas manuales:

    • Inyectar <!DOCTYPE> y entidades externas.

    • Observar si se reflejan o generan errores inusuales.

  2. Herramientas:

    • Burp Suite (XXE plugin).

    • nuclei (templates XXE).

    • XXEInjector.

  3. 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