Comment des centaines d’entreprises comme X, Vercel, Cursor et Discord ont été compromises via une attaque de supply chain
(gist.github.com/hackermondev)- Un lycéen de 16 ans a publié un récapitulatif montrant qu’une faille de la plateforme Mintlify permettait des attaques de cross-site scripting (XSS) sur les sites de documentation de grandes entreprises comme X, Vercel, Cursor et Discord. Cette vulnérabilité lui a permis d’obtenir 11 000 dollars en bug bounty
- Le chemin interne de Mintlify
/_mintlify/static/[subdomain]/[...route]était conçu de façon à pouvoir charger des fichiers externes sans validation de domaine - Un attaquant pouvait injecter du JavaScript dans un fichier SVG afin d’exécuter un script malveillant sur les domaines de services majeurs comme Discord
- La faille affectait presque tous les clients utilisant Mintlify et un simple clic sur un lien pouvait permettre la compromission d’un compte
- Cet incident est considéré comme un exemple montrant qu’une vulnérabilité unique dans la sécurité de la supply chain peut entraîner des dommages à grande échelle
Découverte sur Discord
- En novembre 2025, Discord ayant migré vers Mintlify, une plateforme de documentation basée sur l’IA, la recherche de vulnérabilités a commencé
- Juste après la migration depuis une plateforme personnalisée existante vers Mintlify, le chercheur a analysé l’architecture du nouveau système de documentation
- Le domaine de documentation de Discord (
discord.mintlify.app) exposait tel quel les chemins internes de Mintlify (/_mintlify/*)- Ces chemins devaient nécessairement rester accessibles pour des fonctions essentielles comme l’authentification
Architecture de la plateforme Mintlify
- Mintlify est un service qui prend en charge la rédaction de documentation en Markdown et la convertit automatiquement en documentation web
- Tous les sites de documentation sont exploités sur des sous-domaines
*.mintlify.appou sur des domaines personnalisés - En interne, la plateforme utilise des endpoints comme
/_mintlify/api/user,/_mintlify/markdown/et/_mintlify/static/
Processus de recherche de la faille
- Il a été découvert que l’endpoint
/_mintlify/_markdown/_sites/[subdomain]/[...route]renvoyait des fichiers d’autres documentations sans validation de domaine- Toutefois, ce chemin ne renvoyait que du texte Markdown non rendu, ce qui empêchait toute exécution de code
- L’analyse du package Mintlify CLI a ensuite permis d’identifier l’endpoint
/_mintlify/static/[subdomain]/[...route]- Ce chemin renvoie des fichiers statiques et applique une liste blanche d’extensions de fichiers
- Les fichiers HTML et JS étaient bloqués, mais les fichiers SVG étaient autorisés
Mise en œuvre de l’attaque
- L’attaquant a téléversé dans sa propre documentation Mintlify un fichier SVG contenant du JavaScript injecté
- En appelant ce fichier depuis le domaine de Discord (
https://discord.com/_mintlify/_static/.../lmao.svg), le script s’exécutait - Cela rendait possible l’exécution de XSS non seulement sur Discord, mais aussi sur les domaines de documentation de toutes les entreprises utilisant Mintlify
Collaboration et signalement
- Le chercheur a collaboré avec d’autres chercheurs en sécurité pour vérifier la vulnérabilité
- Discord a désactivé l’ensemble de sa documentation développeur pendant deux heures immédiatement après le signalement, puis est revenu à sa plateforme précédente
- Les mesures prises sont consignées sur la page Discord Status
- Après avoir pris connaissance de la faille via Discord, Mintlify a ouvert un canal Slack entre son équipe d’ingénierie et les chercheurs afin de corriger le problème immédiatement
Étendue de l’impact
- X (Twitter), Vercel, Cursor, Discord et la plupart des clients de Mintlify étaient concernés
- Sur les domaines officiels de ces entreprises, un seul lien malveillant pouvait potentiellement permettre la compromission d’un compte
- Une vulnérabilité unique dans la supply chain peut entraîner un risque en cascade pour la sécurité de centaines d’entreprises
Récompense et conclusion
- L’équipe de recherche a reçu au total environ 11 000 dollars de bug bounty
- Discord a versé 4 000 dollars, et Mintlify a accordé une récompense complémentaire pour chaque vulnérabilité identifiée
- Ce cas reste un exemple emblématique de l’importance de la sécurité de la supply chain et de l’ampleur potentielle d’une faille sur une plateforme unique
1 commentaires
Avis Hacker News
Cet exploit est vraiment terrifiant
Il suffit de cliquer sur un seul lien, par exemple https://discord.com/_mintlify/static/evil/exploit.svg, pour exécuter du JavaScript sur le domaine Discord
Résultat : les cookies de session ou les tokens peuvent être volés, permettant une prise de contrôle complète du compte, la manipulation d’apps développeur ou de webhooks, la suppression de serveurs via l’API, ou encore l’achat de Nitro avec les informations de paiement
Vu l’ampleur potentielle des dégâts, une prime de bug bounty de 4 000 $ semble bien trop faible
localStorage; je me demande si Discord est vraiment conçu ainsiSi les cookies de session étaient systématiquement configurés en HTTP-only, ce type d’attaque serait bien plus difficile
C’est étonnant de voir combien de développeurs frontend ne maîtrisent pas ces bases de sécurité
Sur le marché noir, ça aurait probablement valu bien davantage
Le simple fait qu’on puisse mettre des scripts dans un fichier SVG me paraît être une erreur de sécurité
C’est impressionnant de pouvoir faire une démo interactive ou même un jeu entier dans un seul SVG, mais c’est aussi un nid à vulnérabilités
C’est pour ça que beaucoup de plateformes interdisent l’upload de SVG ou bloquent leur prévisualisation
Sur Discord aussi, si on envoie un SVG, le code s’affiche tel quel, et le partage est également impossible sur Facebook Messenger ou WeChat
Malgré ses avantages en taille de fichier et en indépendance à la résolution, il est regrettable que les formats d’image raster restent encore les plus utilisés
Active Storage de Rails ne sanitise pas les SVG par défaut, donc prudence
Voir la documentation OWASP à ce sujet
<script>Mais ça ne serait peut-être pas suffisant
Avec les formats raster, ce problème est quasiment inexistant
Cette affaire semble illustrer un pan entier de l’écosystème des startups IA actuel
Une startup de documentation IA financée par du capital-risque décroche de gros clients sans vraie validation sécurité, et au final expose des millions de personnes au risque
Mintlify a récemment publié un billet vantant son architecture de cache complexe, mais en pratique ils semblent ne même pas maîtriser les bases de la sécurité
Et la personne qui a trouvé la vulnérabilité n’a touché que 5 000 $
Je trouve que c’est un bon exemple de la fragilité de la culture de développement assistée par l’IA actuelle
La vraie cause, ce sont les chaînes de dépendances complexes et l’enfer des DLL tierces
Si Discord n’avait pas servi sa documentation API directement depuis
discord.com, ce problème n’aurait pas existéUn CDN ne devrait-il pas suffire ?
C’est un bug permettant de prendre complètement le contrôle des comptes clients, et pourtant la récompense est dérisoire
À notre époque, il n’y a aucune excuse pour laisser passer du XSS
Deux XSS réfléchies ont encore été découvertes cette année dans Anubis
Il faut absolument auditer les dépendances tierces
Voir les avis de sécurité ici et ici
À part sur de très grands réseaux sociaux, il est difficile d’en tirer un gain financier
Je me dis qu’on pourrait embaucher ce hacker de 16 ans en CDI ou à temps partiel pour faire de l’audit sécurité en continu
Même à 50 000 $ par an, la sécurité de l’entreprise serait probablement transformée
Le bug bounty est plus efficace, car la rémunération dépend des résultats
En revanche, si la récompense est trop basse, le chercheur peut être tenté de vendre la faille à un tiers
XSS, IAM, exploits shell, etc. : chacun a son domaine, donc une seule personne peut difficilement tout couvrir
Impressionnant qu’un jeune de 16 ans ait trouvé ça
En revanche, appeler une XSS une attaque de la chaîne d’approvisionnement (supply chain attack) me paraît inhabituel
Si le problème se produit à un maillon intermédiaire comme Mintlify, l’utilisateur final n’a aucun moyen de se défendre
Comme le code malveillant est livré à travers une chaîne de confiance, on peut aussi y voir une forme de XSS au niveau supply chain
Le rapport du collaborateur mentionne aussi une vulnérabilité RCE encore plus grave
Voir ce blog pour les détails
Ce genre de cas montre que :
1️⃣ il faut impérativement configurer une Content Security Policy (CSP)
2️⃣ sur les serveurs NodeJS, il faudrait activer par défaut l’option
--disallow-code-generation-from-stringsLes fournisseurs de services comme Vercel devraient afficher un avertissement lorsqu’aucune CSP n’est utilisée
D’autres flags de sécurité NodeJS utiles sont récapitulés dans cet article
Faire du proxy vers un service tiers depuis le domaine principal qui gère l’authentification utilisateur est le pire choix possible
Mintlify aurait dû être isolé sur un sous-domaine séparé, comme
dev-docs.discord.comMême si les clients le demandent, le risque sécurité est trop élevé
En revanche, il y a beaucoup de demande pour héberger la documentation sur le domaine principal à cause du SEO
Du point de vue de Mintlify, cette affaire doit être extrêmement stressante
Il faut utiliser un sous-domaine dédié aux tiers, et limiter les cookies d’authentification de l’app principale en host-only
Si possible, utiliser un domaine complètement distinct (par ex.
discorddocs.com) est encore plus sûrMais au vu du risque sécurité, c’est un choix beaucoup trop dangereux
Désormais, je n’ouvrirai plus jamais de fichier SVG
Le fait qu’un jeune de 16 ans ait trouvé ça est absolument légendaire