- Un estudiante de preparatoria de 16 años publicó un análisis de un caso en el que fue posible realizar ataques de cross-site scripting (XSS) en sitios de documentación de grandes empresas como X, Vercel, Cursor y Discord aprovechando una vulnerabilidad en la plataforma Mintlify. Gracias a esta vulnerabilidad, recibió una recompensa por bugs de 11,000 dólares
- La ruta interna de Mintlify
/_mintlify/static/[subdomain]/[...route] estaba diseñada de forma que podía cargar archivos externos sin validación de dominio
- El atacante pudo inyectar JavaScript dentro de archivos SVG, lo que permitía ejecutar scripts maliciosos en dominios de servicios importantes como Discord
- La vulnerabilidad afectaba a casi todos los clientes que usaban Mintlify, y bastaba con un solo clic en un enlace para secuestrar cuentas
- Este incidente se considera un caso que demuestra cómo una sola vulnerabilidad en la seguridad de la cadena de suministro puede provocar daños a gran escala
Descubrimiento en Discord
- En noviembre de 2025, cuando Discord migró a Mintlify, una plataforma de documentación impulsada por IA, comenzó la búsqueda de vulnerabilidades
- Justo después de la migración desde la plataforma personalizada anterior a Mintlify, el investigador analizó la estructura del nuevo sistema de documentación
- El dominio de documentación de Discord (
discord.mintlify.app) exponía directamente las rutas internas de Mintlify (/_mintlify/*)
- Era necesario que estas rutas fueran accesibles para funciones clave como la autenticación
Estructura de la plataforma Mintlify
- Mintlify es un servicio que permite escribir documentación basada en Markdown y convertirla automáticamente en documentación web
- Todos los sitios de documentación operan en subdominios
*.mintlify.app o en dominios personalizados
- Internamente utiliza endpoints como
/_mintlify/api/user, /_mintlify/markdown/ y /_mintlify/static/
Proceso de investigación de la vulnerabilidad
- Se descubrió que el endpoint
/_mintlify/_markdown/_sites/[subdomain]/[...route] devolvía archivos de otra documentación sin validación de dominio
- Sin embargo, esta ruta solo devolvía texto Markdown sin renderizar, por lo que no era posible ejecutar código
- Después, al analizar el paquete Mintlify CLI, se encontró adicionalmente el endpoint
/_mintlify/static/[subdomain]/[...route]
- Esta ruta devuelve archivos estáticos y aplica una lista blanca de extensiones de archivo
- Los archivos HTML y JS estaban bloqueados, pero los archivos SVG sí estaban permitidos
Materialización del ataque
- El atacante subió a su propia documentación de Mintlify un archivo SVG con JavaScript incrustado
- Al invocar ese archivo desde el dominio de Discord (
https://discord.com/_mintlify/_static/.../lmao.svg), el script se ejecutaba
- Esto hacía posible ejecutar XSS no solo en Discord, sino en los dominios de documentación de todas las empresas que usaban Mintlify
Colaboración y reporte
- El investigador colaboró con otros investigadores de seguridad para verificar la vulnerabilidad
- Discord, justo después del reporte, desactivó toda su documentación para desarrolladores durante 2 horas y luego volvió a la plataforma anterior
- Tras enterarse de la vulnerabilidad a través de Discord, Mintlify abrió un canal de Slack entre su equipo de ingeniería y los investigadores para trabajar de inmediato en la corrección
Alcance del impacto
- La mayoría de los clientes de Mintlify, incluidos X (Twitter), Vercel, Cursor y Discord, estaban dentro del alcance del impacto
- Existía la posibilidad de secuestro de cuentas mediante un solo enlace malicioso en los dominios oficiales de cada empresa
- Una sola vulnerabilidad en la cadena de suministro puede provocar un riesgo encadenado para la seguridad de cientos de empresas
Recompensa y conclusión
- El equipo de investigación recibió en total aproximadamente 11,000 dólares en bug bounty
- Discord otorgó 4,000 dólares, y Mintlify entregó recompensas adicionales por vulnerabilidades individuales
- Este caso queda como un ejemplo representativo de la importancia de la seguridad de la cadena de suministro y del alcance que puede tener la vulnerabilidad de una sola plataforma
1 comentarios
Comentarios en Hacker News
Este exploit es un caso realmente aterrador
Con hacer clic en un solo enlace, por ejemplo uno como https://discord.com/_mintlify/static/evil/exploit.svg, se ejecuta JavaScript en el dominio de Discord
Como resultado, pueden robar cookies de sesión o tokens, tomar control total de la cuenta, manipular apps de desarrollador o webhooks, o incluso borrar servidores mediante la API o usar la información de pago para comprar Nitro; el impacto es enorme
Considerando la magnitud del daño posible, una recompensa de bug bounty de $4,000 se siente demasiado baja
Si las cookies de sesión siempre se configuran como HTTP-only, este tipo de ataque se vuelve mucho más difícil
Sorprende cuántos desarrolladores frontend no conocen estos conceptos básicos de seguridad
En el mercado negro probablemente habría valido mucho más
Creo que permitir scripts dentro de archivos SVG ya era en sí mismo un error de seguridad
Está bueno que se puedan hacer demos interactivas o juegos completos en un solo SVG, pero precisamente por eso también es un foco de vulnerabilidades
Por eso muchas plataformas prohíben subir SVG o bloquean su vista previa
En Discord, si subes un SVG, se muestra el código tal cual, y en Facebook Messenger o WeChat tampoco se puede compartir
Aunque tiene ventajas como tamaño pequeño y resolución independiente, da pena que en la práctica los formatos de imagen rasterizada sigan usándose más
Active Storage de Rails no sanitiza SVG por defecto, así que hay que tener cuidado
Para más contexto, ver la documentación de OWASP
<script>Pero quizá eso por sí solo no sea suficiente
En los formatos rasterizados casi no pasa eso
Este incidente parece mostrar una cara del actual ecosistema de startups de IA
Una startup de documentación para IA, impulsada por capital de riesgo, consigue grandes clientes sin validaciones de seguridad y al final expone a millones de personas al riesgo
Mintlify publicó hace poco un blog presumiendo una arquitectura de caché compleja, pero en la práctica parece que ni siquiera domina la seguridad básica
Y en una situación así, la persona que encontró la vulnerabilidad recibe apenas $5,000
Me parece un buen ejemplo de lo frágil que es hoy la cultura de desarrollo basada en IA
La raíz está en las cadenas de dependencias complejas y en el infierno de múltiples DLL de terceros
Si Discord no hubiera servido la documentación de la API directamente desde discord.com, esto no habría pasado
Parecería que con un CDN debería bastar
Es un bug que puede comprometer completamente las cuentas de clientes, y aun así la recompensa es demasiado baja
A estas alturas no debería haber ninguna razón para permitir XSS
En Anubis este año se encontraron dos XSS reflejados
Hay que revisar sí o sí las dependencias de terceros
Los avisos de seguridad relacionados están aquí y aquí
Fuera de grandes redes sociales, es difícil monetizarlas
Me hace pensar que quizá sería buena idea contratar a este hacker de 16 años a tiempo completo o parcial para hacer revisiones de seguridad permanentes
Con solo pagarle $50,000 al año parecería que la seguridad de la empresa mejoraría muchísimo
El bug bounty es más eficiente porque recompensa según los hallazgos
Aunque si la recompensa es baja, también aparece la tentación de venderlo a un tercero
XSS, IAM, exploits de shell y demás: cada quien se especializa en un área, así que una sola persona difícilmente cubriría todo
Impresiona que alguien de 16 años haya encontrado esto
Pero me resulta raro llamar ataque a la cadena de suministro (supply chain attack) a un XSS
Si el problema aparece en una capa intermedia como Mintlify, el usuario final no tiene ninguna forma de defenderse
El código malicioso termina entregándose dentro de una cadena de confianza, así que podría verse como una especie de XSS a nivel de cadena de suministro
El informe del colaborador también incluye una vulnerabilidad de RCE aún más grave
Más detalles en este blog
Casos como este muestran que,
1️⃣ hay que configurar sí o sí Content Security Policy (CSP)
2️⃣ en servidores NodeJS debería usarse por defecto la opción
--disallow-code-generation-from-stringsProveedores de servicios como Vercel deberían mostrar una advertencia cuando no se use CSP
Además, en este artículo se resumen otras flags de seguridad útiles para NodeJS
Hacer proxy desde el dominio principal, donde existe autenticación de usuario, hacia un servicio de terceros es la peor decisión posible
Mintlify debió aislarse en un subdominio aparte, como dev-docs.discord.com
Aunque los clientes lo pidan, el riesgo de seguridad es demasiado alto
Eso sí, por SEO hay mucha demanda para poner la documentación en el dominio principal
Desde la perspectiva de Mintlify, esto también debe haber sido muy estresante
Hay que usar un subdominio para terceros y restringir las cookies de autenticación de la app principal como host-only
Si es posible, usar un dominio completamente distinto (por ejemplo, discorddocs.com) sería todavía más seguro
Pero comparado con el riesgo de seguridad, es una decisión demasiado peligrosa
A partir de ahora no voy a abrir jamás un archivo SVG
Que alguien de 16 años haya encontrado esto es realmente legendario