Attaque Mistral AI : comment la compromission TanStack a contaminé le SDK
目次
Le 11 mai 2026, l’écosystème open source a basculé dans une nouvelle ère du risque logiciel. Une attaque coordonnée a compromis plus de 170 paquets sur npm et PyPI, avec en tête de liste 42 paquets officiels du projet TanStack, et, par effet de propagation, le SDK officiel de Mistral AI, le fleuron français de l’intelligence artificielle générative. Pour la première fois, des paquets malveillants ont été distribués avec une attestation de provenance SLSA valide. Le signal de confiance sur lequel toute la chaîne d’approvisionnement logicielle reposait s’est retourné contre ses utilisateurs.
Une contamination par ricochet
Mistral AI n’était pas la cible initiale. L’attaque a commencé chez TanStack, un projet de routage très utilisé dans l’écosystème React (plus de 12 millions de téléchargements hebdomadaires pour @tanstack/react-router). Comme nous l’avons détaillé dans notre analyse complète de l’attaque TanStack, les attaquants ont enchaîné trois vulnérabilités de GitHub Actions — un fork camouflé sous le nom zblgg/configuration, un déclencheur pull_request_target, et un empoisonnement du cache d’Actions — pour extraire en mémoire un jeton OIDC du runner GitHub et publier 84 versions malveillantes via le pipeline légitime de TanStack.
L’impact réel sur Mistral AI
Dans son avis de sécurité officiel (MAI-2026-002), Mistral AI confirme avoir été touché « par une attaque sur la chaîne d’approvisionnement liée à la compromission de TanStack ». L’enquête forensique précise que l’infrastructure de Mistral n’a pas été compromise : c’est l’appareil d’un développeur affecté qui a servi de relais à la propagation automatisée. Les paquets npm malveillants sont restés en ligne du 11 mai à 22h45 UTC jusqu’au 12 mai à 01h53 UTC, et le paquet PyPI de 03h05 UTC à 05h05 UTC.
Mistral a depuis classé la sévérité des paquets npm comme faible : le fichier setup.mjs qu’ils contenaient pointait vers une ressource inexistante, rendant la charge utile inopérante. L’analyse de Wiz confirme ce bug dans la charge ciblant @mistralai/* et @uipath/*. En revanche, la version PyPI était pleinement fonctionnelle.
Une charge utile particulièrement vicieuse côté Python
C’est sur PyPI que l’attaque a montré son vrai visage. Microsoft Threat Intelligence a analysé le paquet mistralai==2.4.6 et identifié un dropper inséré dans mistralai/client/__init__.py. À chaque import mistralai, le code téléchargeait silencieusement un fichier transformers.pyz depuis git-tanstack[.]com ou l’IP 83.142.209[.]194 — un nom choisi pour se fondre dans les environnements de machine learning utilisant la bibliothèque Transformers de Hugging Face.
Selon ハッカーニュース, la charge utile inclut une logique géographique : elle évite les environnements en langue russe, et dispose d’une « branche destructive géolocalisée avec une probabilité d’1/6 d’exécuter rm -rf / » sur les systèmes configurés pour Israël ou l’Iran. Premier dans cette campagne : le ver vise désormais les coffres-forts de mots de passe 1Password et Bitwarden.
Pourquoi cette attaque change la donne
Le groupe TeamPCP, déjà responsable des compromissions de Trivy et de Bitwarden CLI, signe ici une rupture méthodologique. Aucun identifiant n’a été volé chez TanStack. Aucun mainteneur n’a été piégé. L’authentification 2FA était active partout. Le publish npm a fonctionné exactement comme prévu — sauf qu’il signait l’attaque. C’est précisément ce qu’expliquait le post-mortem de Tanner Linsley : la provenance SLSA, ce certificat cryptographique censé garantir l’origine d’un paquet, attestait honnêtement que le code venait bien du dépôt TanStack. Elle ne pouvait pas dire que le runtime du workflow avait été détourné en cours de route.
Pour les équipes utilisant des SDK de fournisseurs d’IA, Mistral, mais aussi OpenAI, Anthropic, Cohere — la leçon est immédiate : un éditeur de modèles peut avoir une posture de sécurité irréprochable et se retrouver vecteur d’attaque parce qu’une dépendance amont de son SDK a été compromise. C’est exactement le scénario décrit dans notre dossier sur les vulnérabilités de la chaîne d’approvisionnement, où 91 % des organisations déclarent avoir subi un incident logiciel l’année passée.
Si votre équipe a installé un paquet @mistralai/* ou @tanstack/* le 11 mai, StepSecurity recommande un ordre opérationnel précis : repérer et supprimer le démon de persistance gh-token-monitor avant de révoquer le moindre jeton — sinon la charge utile déclenche un effacement du répertoire utilisateur. Ensuite seulement : rotation des jetons npm, des PAT GitHub, des identifiants AWS/GCP, des tokens Kubernetes, et audit des workflows GitHub Actions pour les schémas pull_request_target exposés.
L’attaque TanStack–Mistral marque la fin d’une époque : celle où l’on pouvait considérer la provenance cryptographique comme suffisante. Elle reste nécessaire mais pas une preuve suffisante. La surveillance continue de l’exposition des identifiants sur les marchés clandestins demeure la seconde ligne de défense, celle qui détecte les jetons volés avant qu’ils ne servent au prochain mouvement latéral.
