Atacando software de biblioteca: XXE
Author: Pablo Picurelli Ortiz
Atacando software de biblioteca: XXE en DSpace
Conferencia técnica, contexto de jornadas de ciberseguridad. Ponente: Pablo Picurelli Ortiz, estudiante de grado en Ciberseguridad en la URJC.
Idea principal
La charla trata sobre cómo Pablo encontró y reportó una vulnerabilidad de tipo XML External Entity Injection (XXE) en DSpace, un software open source usado por miles de universidades y centros de investigación en todo el mundo para gestionar repositorios institucionales. El resultado: su primer CVE publicado, el CVE-2025-5362, a los 23 años y siendo estudiante de grado.
Conceptos clave
- DSpace: plataforma open source creada en 2002 por MIT y HP Labs, con más de 3.600 instalaciones activas. La usan universidades públicas españolas para depositar papers, datos de investigación, etc.
- La vulnerabilidad está en cómo DSpace procesaba archivos XML al importar ítems mediante el Simple Archive Format (SAF), básicamente un zip con metadatos en Dublin Core XML
- El ataque XXE se inyecta en el archivo dublin_core.xml, que es el que lleva los metadatos del ítem (título, autor, etc.)
- El vector de ataque requiere acceso de administrador, pero es realista: alguien externo manda un zip "legítimo" a un bibliotecario y este lo importa sin inspeccionarlo
- El parser vulnerable era DocumentBuilderFactory de Java, instanciado sin deshabilitar las características peligrosas (entidades externas, DTD externas, etc.)
- Se explotaron dos variantes:
- LFI con
file:///para leer archivos del sistema (ej./etc/passwd) - SSRF con la IP de metadatos de AWS (
169.254.169.254) para filtrar credenciales de instancias cloud, lo que subió el CVSS de 5.2 a 6.9
- LFI con
Desarrollo/contexto
El contexto detrás de por qué DSpace importa tanto viene de la legislación española: la Ley de la Ciencia obliga a depositar en repositorios públicos todas las publicaciones financiadas con fondos públicos. DSpace es el software que usan muchas instituciones para cumplir con eso, así que tiene una superficie de ataque considerable y relativamente poco auditada desde el punto de vista de seguridad.
El ataque en sí es elegante en su sencillez. El SAF es un formato de importación masiva que acepta un zip con un archivo dublin_core.xml dentro. Si ese XML lleva una entidad externa declarada en el DOCTYPE y el parser no está bien configurado, el servidor resuelve la URL que le metes y devuelve el contenido en los metadatos del ítem importado. Pablo lo demostró en los POCs leyendo archivos del sistema y, escalando el ataque, sacando tokens temporales de AWS del endpoint de IMDS.
Términos técnicos
- XXE (XML External Entity Injection): vulnerabilidad que explota cómo algunos parsers XML resuelven entidades externas sin validarlas
- SSRF (Server-Side Request Forgery): forzar al servidor a hacer peticiones HTTP que no debería
- SAF (Simple Archive Format): estructura de importación de ítems en DSpace, básicamente un zip con XML y archivos adjuntos
- Dublin Core: esquema de metadatos estándar con 15 campos (título, autor, fecha, etc.), el que se explota aquí
- IMDS (Instance Metadata Service): endpoint interno de AWS en
169.254.169.254que expone credenciales temporales de la instancia - DocumentBuilderFactory: clase Java para parsear XML, vulnerable si no se le aplican los métodos de sanitización
Conclusiones
Lo más interesante de esta charla no es solo la vulnerabilidad en sí, sino el contexto. Estamos hablando de software instalado en universidades públicas de todo el mundo, que maneja datos científicos financiados con dinero público, y que tenía parsers XML sin sanitizar en varios puntos del código. El parche requirió cambiar 34 ficheros. El CVE se publicó en menos de un mes desde el reporte, lo cual es bastante rápido para este tipo de procesos.
Además, el hecho de que un estudiante de grado lo haya encontrado revisando el código fuente dice bastante sobre el estado del software en entornos académicos y sobre la importancia de hacer auditorías aunque sea en proyectos open source "aburridos".
Para investigar más
- Sandbox oficial de DSpace para practicar:
sandbox.dspace.org - PortSwigger Web Security Academy tiene laboratorios de XXE bastante buenos para entender los distintos vectores (in-band, blind, error-based)
- Buscar el advisory con "DSpace CVE-2025-5362" para ver el reporte completo