Parte: 4 — Seguridad de aplicaciones web · Fuente: The Web Application Hacker's Handbook / OWASP ⏱️ Duración estimada: 100 min · Nivel: Avanzado
Explotar vulnerabilidades XXE (XML External Entities): abusar de parsers XML mal configurados para leer archivos locales, provocar SSRF y, en casos ciegos, exfiltrar datos out-of-band. Es un fallo clásico que sigue apareciendo en importadores, SOAP, SAML y formatos basados en XML.
⚠️ Ética: solo en labs propios/autorizados. Leer archivos del servidor ajeno es un delito.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | XML, DTD y entidades | Base del ataque |
| 2 | Entidades externas | El vector principal |
| 3 | Lectura de archivos locales | Impacto directo |
| 4 | XXE → SSRF | Encadenar impactos |
| 5 | XXE ciega y OOB con DTD externo | Exfiltración sin salida |
| 6 | XXE en SAML, DOCX, SVG | Superficie oculta |
| 7 | Defensa: deshabilitar DTD/entidades | Cierre del fallo |
SYSTEM "file:///etc/passwd"). Característica: el parser la resuelve si no está deshabilitada.%): entidad usada dentro del DTD. Característica: clave para exfiltración OOB.⚠️ Solo en labs propios.
<?xml version="1.0"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>
http://169.254.169.254/..../etc/hostname y /etc/passwd en el lab y explica la diferencia de impacto.Resuelve un lab de XXE ciega de PortSwigger exfiltrando el contenido de un archivo del servidor mediante un DTD externo alojado por ti. Criterio de aceptación: el lab queda resuelto, entregas el DTD externo, el payload y el dato exfiltrado, y explicas la configuración de parser que lo evitaría.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| La entidad no se resuelve | Parser con entidades deshabilitadas; busca otro endpoint |
| Error de sintaxis XML | DTD mal formado; valida la estructura |
| Sin salida del archivo | XXE ciega; usa DTD externo OOB |
| DTD externo no se carga | El servidor no permite conexiones salientes |
| Parameter entity ignorada | Restricciones del parser; ajusta la técnica |
❓ ¿Por qué sigue existiendo XXE si es antiguo? Porque muchos parsers procesan DTD por defecto y XML se esconde en SAML, SVG, DOCX y APIs SOAP.
❓ ¿JSON es inmune? JSON no tiene entidades externas, así que no sufre XXE. Pero otras inyecciones sí aplican.
❓ ¿Cuál es la defensa definitiva? Deshabilitar el procesamiento de DTD y entidades externas en la configuración del parser.
Clase 099 — Server-Side Request Forgery (SSRF)