- Um estudante do ensino médio de 16 anos documentou e divulgou um caso em que era possível realizar ataques de cross-site scripting (XSS) em sites de documentação de grandes empresas como X, Vercel, Cursor e Discord explorando uma vulnerabilidade na plataforma Mintlify. Com essa falha, ele recebeu US$ 11.000 em bug bounty
- O caminho interno da Mintlify
/_mintlify/static/[subdomain]/[...route] tinha uma estrutura que permitia carregar arquivos externos sem validação de domínio
- O atacante podia injetar JavaScript em um arquivo SVG e executar scripts maliciosos em domínios de grandes serviços, como o Discord
- A vulnerabilidade afetava quase todos os clientes que usam Mintlify, e um único clique em um link podia permitir o sequestro de conta
- O caso é avaliado como um exemplo de como uma única falha de segurança na cadeia de suprimentos pode levar a um impacto em larga escala
Descoberta no Discord
- Em novembro de 2025, quando o Discord migrou para a plataforma de documentação Mintlify com IA, começou a busca pela vulnerabilidade
- Logo após a migração da plataforma personalizada anterior para a Mintlify, o pesquisador analisou a estrutura do novo sistema de documentação
- O domínio de documentação do Discord (
discord.mintlify.app) expunha diretamente os caminhos internos da Mintlify (/_mintlify/*)
- Esse caminho precisava permanecer acessível por ser essencial para recursos importantes, como autenticação
Estrutura da plataforma Mintlify
- A Mintlify é um serviço que oferece criação de documentação baseada em Markdown e a converte automaticamente em documentação web
- Todos os sites de documentação operam em subdomínios
*.mintlify.app ou em domínios personalizados
- Internamente, usa endpoints como
/_mintlify/api/user, /_mintlify/markdown/ e /_mintlify/static/
Processo de busca da vulnerabilidade
- Foi descoberto que o endpoint
/_mintlify/_markdown/_sites/[subdomain]/[...route] retornava arquivos de outra documentação sem validação de domínio
- Porém, esse caminho retornava apenas texto Markdown não renderizado, então não era possível executar código
- Depois, ao analisar o pacote Mintlify CLI, foi descoberto adicionalmente o endpoint
/_mintlify/static/[subdomain]/[...route]
- Esse caminho retornava arquivos estáticos e aplicava uma whitelist de extensões de arquivo
- Arquivos HTML e JS eram bloqueados, mas arquivos SVG eram permitidos
Execução do ataque
- O atacante enviou para sua própria documentação da Mintlify um arquivo SVG com JavaScript injetado
- Ao chamar esse arquivo a partir do domínio do Discord (
https://discord.com/_mintlify/_static/.../lmao.svg), o script era executado
- Com isso, era possível executar XSS não só no Discord, mas também nos domínios de documentação de todas as empresas que usam Mintlify
Colaboração e reporte
- O pesquisador trabalhou em conjunto com outros pesquisadores de segurança para validar a vulnerabilidade
- O Discord, logo após o reporte, desativou toda a documentação de desenvolvedores por 2 horas e depois retornou à plataforma anterior
- Depois de tomar conhecimento da falha por meio do Discord, a Mintlify abriu um canal no Slack entre a equipe de engenharia e os pesquisadores para realizar a correção imediatamente
Escopo do impacto
- A maior parte dos clientes da Mintlify, como X (Twitter), Vercel, Cursor e Discord, estava dentro da área afetada
- Havia a possibilidade de sequestro de conta com um único link malicioso nos domínios oficiais de cada empresa
- Uma única vulnerabilidade na cadeia de suprimentos pode causar um risco em cascata para a segurança de centenas de empresas
Recompensa e conclusão
- A equipe de pesquisa recebeu no total cerca de US$ 11.000 em bug bounty
- O Discord pagou US$ 4.000, e a Mintlify concedeu recompensas adicionais por vulnerabilidades individuais
- Este caso permanece como um exemplo representativo da importância da segurança da cadeia de suprimentos e do alcance de uma vulnerabilidade em uma plataforma única
1 comentários
Comentários do Hacker News
Este exploit é um caso realmente assustador
Basta clicar em um único link, por exemplo https://discord.com/_mintlify/static/evil/exploit.svg, para que JavaScript seja executado no domínio do Discord
Como resultado, cookies de sessão ou tokens podem ser roubados, permitindo o controle total da conta, a manipulação de apps de desenvolvedor ou webhooks, ou até a exclusão de servidores via API e a compra de Nitro usando informações de pagamento
Considerando a dimensão do dano, uma bug bounty de $4.000 parece uma recompensa pequena demais
Se os cookies de sessão fossem sempre definidos como HTTP-only, esse tipo de ataque seria muito mais difícil
É surpreendente como muitos desenvolvedores frontend ainda não conhecem esses conceitos básicos de segurança
No mercado negro isso provavelmente teria um valor bem maior
Acho que o simples fato de ser possível colocar scripts dentro de arquivos SVG já foi um erro de segurança
É legal poder criar demos interativas ou jogos inteiros em um único SVG, mas isso também o torna um terreno fértil para vulnerabilidades
Por isso, muitas plataformas bloqueiam upload de SVG ou impedem a pré-visualização
No Discord, ao enviar um SVG, ele aparece como código puro, e em plataformas como Facebook Messenger ou WeChat o compartilhamento também não é permitido
Mesmo com vantagens como tamanho reduzido e independência de resolução, ainda é uma pena que os formatos de imagem raster continuem sendo mais usados
O Active Storage do Rails, por padrão, não sanitiza SVG, então é preciso tomar cuidado
Veja a documentação da OWASP
<script>Mas talvez isso por si só não seja suficiente
Em formatos raster isso quase não acontece
Este caso parece mostrar um retrato do atual ecossistema de startups de IA
Uma startup de documentação de IA que cresceu com dinheiro de VC conquista grandes clientes sem validação adequada de segurança e, no fim, expõe milhões de pessoas a risco
A Mintlify publicou recentemente um post no blog se gabando de uma arquitetura complexa de cache, mas na prática parece não dominar nem o básico de segurança
E quem encontrou a vulnerabilidade recebeu apenas $5.000
Acho que isso mostra o quão frágil é a atual cultura de desenvolvimento baseada em IA
A causa raiz está nas cadeias complexas de dependências e no inferno de múltiplas DLLs de terceiros
Se o Discord não servisse a documentação da API diretamente em discord.com, esse problema não existiria
Um CDN não deveria ser suficiente?
É um bug que permite tomar completamente a conta do cliente, mas a recompensa é baixa demais
E hoje em dia não deveria haver motivo para permitir XSS
No Anubis, duas falhas de XSS refletido foram encontradas só este ano
Dependências de terceiros precisam ser auditadas obrigatoriamente
Veja os avisos de segurança aqui e aqui
Fora de grandes redes sociais, costuma ser difícil transformá-las em ganho financeiro
Ao ver que foi um hacker de 16 anos quem encontrou isso, pensei: por que não contratá-lo em tempo integral ou parcial para fazer auditoria contínua de segurança?
Mesmo pagando $50.000 por ano, parece que a segurança da empresa melhoraria drasticamente
Bug bounty é mais eficiente porque recompensa pelos resultados
Ainda assim, se o valor for baixo, surge a tentação de vender para terceiros
XSS, IAM, exploits de shell etc.; cada um atua melhor em uma área, então é difícil uma única pessoa cobrir tudo
Impressionante que um jovem de 16 anos tenha encontrado isso
Mas chamar XSS de ataque à cadeia de suprimentos (supply chain attack) ainda soa estranho para mim
Quando o problema acontece em uma camada intermediária como a Mintlify, o usuário final não tem nenhum meio de defesa
Como o código malicioso é entregue dentro de uma cadeia confiável, dá para ver isso como uma espécie de XSS em nível de supply chain
O relatório do colaborador também inclui uma vulnerabilidade de RCE ainda mais grave
Veja mais detalhes neste blog
Casos assim mostram que:
1️⃣ Content Security Policy (CSP) deve ser configurada obrigatoriamente
2️⃣ Em servidores NodeJS, a opção
--disallow-code-generation-from-stringsdeveria ser usada por padrãoProvedores de serviço como a Vercel deveriam exibir avisos quando o CSP não estiver em uso
Outros flags de segurança do NodeJS que valem a pena conferir estão reunidos neste artigo
Fazer proxy para um serviço de terceiros no domínio principal que usa autenticação de usuário é a pior escolha possível
A Mintlify deveria ter sido isolada em um subdomínio separado, como dev-docs.discord.com
Mesmo quando o cliente quer isso, o risco de segurança é grande demais
Ainda assim, por causa de SEO, existe muita demanda para manter a documentação no domínio principal
Do ponto de vista da Mintlify, isso tudo também deve estar sendo extremamente estressante
Deve-se usar um subdomínio para terceiros, e os cookies de autenticação do app principal devem ficar restritos como host-only
Se possível, usar um domínio totalmente diferente (por exemplo, discorddocs.com) é ainda mais seguro
Mas, comparado ao risco de segurança, é uma escolha perigosa demais
A partir de agora, nunca mais vou abrir arquivos SVG
O fato de um jovem de 16 anos ter descoberto isso é realmente lendário