Comment « Clinejection » a transformé un bot IA en vecteur d’attaque de la chaîne d’approvisionnement
19 février 2026
0 minutes de lectureLe 9 février 2026, le chercheur en sécurité Adnan Khan a rendu publique une chaîne de vulnérabilités (baptisée « Clinejection ») dans le dépôt Cline. Celle-ci a transformé le bot de triage des problèmes de ce populaire outil de programmation IA en vecteur d’attaque de la chaîne d’approvisionnement. Huit jours plus tard, un acteur inconnu a exploité la même faille pour publier une version non autorisée de Cline CLI sur npm, installant l’agent IA OpenClaw sur chaque poste de développeur ayant effectué une mise à jour pendant une période de huit heures.
Cette chaîne d’attaque est remarquable non pas pour une technique inédite en particulier, mais pour la manière dont elle combine des vulnérabilités bien connues (injection indirecte de prompt, empoisonnement du cache GitHub Actions et faiblesses du modèle de gestion des identifiants) en une seule attaque, qui ne nécessite rien de plus que l’ouverture d’un problème GitHub.
Pour les plus de 5 millions d’utilisateurs de Cline, l’impact réel a été limité. La version non autorisée cline@2.3.0 est restée disponible environ huit heures, et sa charge utile (qui installait OpenClaw à l’échelle du système) n’était pas ouvertement destructrice. Mais c’est son impact potentiel — diffuser du code arbitraire à chaque développeur ayant activé les mises à jour automatiques — qui rend cet incident digne d’une analyse approfondie. Snyk et Cline ont déjà établi un partenariat en matière de sécurité visant à sécuriser le développement assisté par l’IA. Cet incident rappelle pourquoi ce type de collaboration est important dans toute l’industrie.
Un agent IA doté de permissions trop étendues
Le 21 décembre 2025, les mainteneurs de Cline ont ajouté à leur dépôt GitHub un workflow de triage des problèmes basé sur l’IA. Celui-ci utilisait claude-code-action d’Anthropic pour répondre automatiquement aux nouveaux problèmes. Voici à quoi ressemblait la configuration :
Deux choix de configuration rendaient cette approche dangereuse :
allowed_non_write_users: "*"signifiait que n’importe quel utilisateur GitHub pouvait déclencher le workflow en ouvrant un problème.--allowedTools "Bash,Read,Write,Edit,..."donnait à l’agent IA la possibilité d’exécuter n’importe quel code sur le runner GitHub Actions.
Le titre du problème était directement inséré dans le prompt. C’est un vecteur classique d’injection indirecte de prompt.
Étape 1 : injection de prompt via le titre du problème
Un attaquant pouvait rédiger un titre de problème GitHub contenant des instructions destinées à détourner Claude de son comportement prévu :
La référence github:cline/cline#aaaaaaaa pointe vers un commit précis. Grâce à l’architecture de forks de GitHub, un attaquant peut envoyer un commit vers son propre fork. Ce commit devient alors accessible via l’URL du dépôt parent, même après la suppression du fork (technique connue sous le nom de « commit orphelin »).
Le commit remplace package.json par une version contenant un script preinstall malveillant :
Lorsque Claude exécute npm install avec son outil Bash, le script preinstall s’exécute automatiquement. L’agent IA n’a aucune possibilité d’inspecter ce qui s’exécute. Khan a confirmé que Claude « a exécuté la charge utile sans hésiter lors de tous les tests » sur un miroir du dépôt Cline.
Snyk suit de près ce type de schéma. Dans nos recherches sur l’analyse des flux toxiques, nous décrivons précisément cette catégorie de vulnérabilité : des données non fiables sont injectées dans le contexte d’un agent IA, qui dispose d’un accès à des outils permettant d’exécuter du code. Il en résulte un « flux toxique » où l’attaquant contrôle le comportement de l’agent. L’incident Cline est un exemple concret de flux toxiques dans un pipeline CI/CD, et pas seulement dans un environnement de développement local.
Étape 2 : rebond par empoisonnement du cache GitHub Actions
À elle seule, l’injection de prompt a compromis le runner du workflow de triage. Mais les permissions de GITHUB_TOKEN de ce workflow étaient restreintes, et il n’avait pas accès aux secrets de publication. Pour atteindre le pipeline de mise en production, l’attaquant devait rebondir.
C’est là qu’intervient l’empoisonnement du cache GitHub Actions.
Une propriété essentielle de GitHub Actions : tout workflow exécuté sur la branche par défaut peut lire et écrire dans le cache Actions partagé, même s’il n’utilise pas explicitement la mise en cache. Le workflow de triage à faibles privilèges partageait le même périmètre de cache que le workflow de publication nocturne à privilèges élevés.
La politique d’éviction du cache de GitHub utilise l’éviction du contenu le moins récemment utilisé (LRU) lorsque le cache dépasse 10 Go par dépôt. Un attaquant peut exploiter ce mécanisme en :
Remplissant le cache avec \>10 Go de données inutiles depuis le workflow de triage
Forçant l’éviction LRU des entrées de cache légitimes
Définissant des entrées de cache empoisonnées correspondant aux clés de cache du workflow nocturne
L’outil open source Cacheract de Khan automatise l’ensemble du processus. Il empoisonne les entrées de cache et persiste entre les exécutions du workflow en détournant l’étape postérieure à actions/checkout.
Le workflow de publication nocturne de Cline utilisait des répertoires node_modules mis en cache :
Lorsque le workflow de publication nocturne s’exécutait vers \~2 h UTC et restaurait le cache empoisonné, l’attaquant pouvait exécuter du code arbitraire dans un workflow ayant accès à VSCE_PAT, OVSX_PAT et NPM_RELEASE_TOKEN.
Étape 3 : identifiants nocturnes \= identifiants de production
On pourrait supposer que les identifiants de publication nocturne seraient différents de ceux de production. Ce n’était pas le cas.
Le VS Code Marketplace et OpenVSX associent tous deux les jetons de publication aux éditeurs, et non à des extensions particulières. Les extensions de production et nocturnes de Cline étaient publiées par la même identité (saoudrizwan). Le jeton PAT nocturne permettait donc de publier des versions de production.
De même, le modèle de jetons npm associait NPM_RELEASE_TOKEN au package cline lui-même, utilisé à la fois pour les versions de production et les versions nocturnes.
De la divulgation à l’exploitation : ce qui s’est réellement passé
En résumé, un seul problème GitHub, ouvert par n’importe quel utilisateur, pouvait déclencher la chaîne suivante :
L’injection de prompt dans le titre du problème pousse Claude à exécuter
npm installdepuis un commit contrôlé par l’attaquantLe script
preinstallmalveillant déploie Cacheract sur le runner ActionsCacheract inonde le cache avec \>10 Go de données inutiles, déclenchant l’éviction LRU
Cacheract définit des entrées de cache empoisonnées correspondant aux clés du workflow nocturne
Le workflow de publication nocturne restaure le cache empoisonné vers \~2 h UTC
L’attaquant exfiltre
VSCE_PAT,OVSX_PATetNPM_RELEASE_TOKENL’attaquant publie une mise à jour malveillante destinée à des millions de développeurs
Date | Événement |
|---|---|
21 décembre 2025 | Cline ajoute à son dépôt un workflow de triage des problèmes basé sur l’IA |
1er janvier 2026 | Adnan Khan soumet un avis GHSA et envoie un e-mail à security@cline.bot |
Du 31 janvier au 3 février 2026 | Des échecs suspects de cache sont observés dans les workflows nocturnes de Cline |
9 février 2026 | Khan publie ses conclusions ; Cline corrige la faille en 30 minutes |
10 février 2026 | Cline confirme avoir reçu le signalement et indique que les identifiants ont été renouvelés |
11 février 2026 | Cline renouvelle à nouveau les identifiants après avoir été averti que des jetons étaient peut-être encore valides |
17 février 2026 | La version non autorisée |
17 février 2026 | Cline publie la version 2.4.0, déprécie la version 2.3.0 et révoque le bon jeton |
17 février 2026 | Publication de GHSA-9ppg-jx86-fqw7 |
Après l’incident | Cline adopte la provenance OIDC via GitHub Actions pour publier sur npm |
Khan a découvert la vulnérabilité fin décembre 2025 et soumis un avis de sécurité GitHub (GHSA) le 1er janvier 2026, accompagné d’un e-mail au contact sécurité de Cline.
Le 9 février, après la publication des conclusions de Khan, Cline a corrigé la vulnérabilité en 30 minutes, en supprimant les workflows de triage IA et en éliminant l’utilisation du cache dans les workflows de publication. L’équipe a également renouvelé les identifiants et accusé réception du signalement.
Cependant, le renouvellement des identifiants s’est avéré incomplet. Le 17 février, un acteur inconnu a utilisé un jeton npm toujours actif (le mauvais jeton avait été révoqué le 9 février) pour publier cline@2.3.0, avec une seule modification :
La version non autorisée est restée disponible environ huit heures, avant que Cline ne publie la version 2.4.0 et ne déprécie la version 2.3.0. Le binaire CLI était identique octet pour octet à la version légitime 2.2.3. À la suite de cet incident, Cline a adopté la provenance OIDC via GitHub Actions pour publier sur npm, éliminant ainsi les jetons statiques à longue durée de vie comme vecteur d’attaque.
Khan a également signalé des indices d’une activité suspecte antérieure dans le cache des workflows nocturnes de Cline, entre le 31 janvier et le 3 février. Parmi ces indices figurait un signe caractéristique de compromission par Cacheract : des échecs des étapes postérieures à actions/checkout sans aucun résultat. Il est impossible de savoir s’il s’agissait d’un autre chercheur ou d’un véritable acteur malveillant.
La charge utile OpenClaw : un choix étonnant
La version non autorisée cline@2.3.0 installait OpenClaw à l’échelle du système. OpenClaw est un agent IA open source doté de capacités d’exécution de commandes, d’accès au système de fichiers et de navigation Web. Il n’est pas malveillant par nature.
Mais ce choix mérite réflexion. Comme l’a fait remarquer le chercheur en sécurité Yuval Zacharia : « Si l’attaquant peut lui envoyer des prompts à distance, ce n’est pas simplement un logiciel malveillant : c’est la prochaine évolution du C2. Pas besoin d’implant personnalisé. L’agent est l’implant, et le protocole est du texte brut. »
Un agent IA qui interprète le langage naturel, dispose d’outils intégrés pour exécuter du code et accéder aux fichiers, et passe pour un logiciel de développement légitime auprès des outils de détection des terminaux, constitue un puissant atout après compromission, même si OpenClaw n’a pas été transformé en arme dans ce cas précis.
Snyk a déjà étudié la manière dont l’architecture d’OpenClaw (accès au shell, permissions étendues sur les outils) crée des risques de sécurité. Dans notre étude ToxicSkills, nous avons découvert que 36 % des compétences d’agents IA sur des plateformes comme ClawHub comportent des failles de sécurité, notamment des charges utiles malveillantes actives conçues pour voler des identifiants et installer des portes dérobées.
Les agents IA, nouvelle surface d’attaque des pipelines CI/CD
Cette chaîne d’attaque met en évidence une tendance que Snyk documente dans plusieurs incidents survenus en 2025 et 2026. Les agents IA dotés d’un accès étendu aux outils ouvrent des portes d’entrée faciles vers des systèmes jusque-là difficiles à atteindre.
En décembre 2024, nous avons analysé l’attaque de la chaîne d’approvisionnement par pull request malveillante visant Ultralytics AI. Les attaquants avaient exploité une mauvaise configuration de GitHub Actions pull_request_target pour injecter du code dans le pipeline de build et publier des packages malveillants sur PyPI. L’incident Cline suit le même schéma structurel (abus du déclenchement CI/CD menant au vol d’identifiants et à la publication de code malveillant), mais avec une nouveauté : le point d’entrée est le langage naturel, et non le code.
En août 2025, nous avons décrit comment des attaquants ont détourné des agents de programmation IA lors de l’incident des packages malveillants Nx. Cette attaque utilisait des scripts de cycle de vie npm malveillants pour lancer Claude Code, Gemini CLI et Amazon Q avec des options dangereuses (--dangerously-skip-permissions, --yolo, --trust-all-tools), transformant les assistants IA des développeurs en outils de reconnaissance et d’exfiltration.

Maliciel npm Nx : le détournement d’agents IA expliqué -- Brian Clark, de Snyk, explique comment des attaquants ont utilisé des packages npm malveillants pour détourner des agents de programmation IA afin de voler des identifiants et d’exfiltrer des données.
L’incident Cline va encore plus loin : l’agent IA ne fonctionnait pas sur le poste d’un développeur, mais au sein d’un pipeline CI/CD, avec accès au cache Actions partagé et, indirectement, aux identifiants de publication en production.
Comme nous l’avons souligné dans nos recherches sur le nouveau paysage des menaces visant les applications natives de l’IA, la convergence des vulnérabilités liées à l’IA et des faiblesses de sécurité traditionnelles engendre des chaînes d’attaque auxquelles aucune des deux catégories de défense ne répond efficacement à elle seule. Un scanner d’injection de prompt ne détectera pas l’empoisonnement du cache. Un guide de renforcement CI/CD ne prendra pas en compte le langage naturel comme vecteur d’attaque.
Faible gravité — conséquences potentiellement majeures
Il est important de distinguer ce qui s’est passé de ce qui aurait pu se passer :
Ce qui s’est réellement passé :
Une version non autorisée de
cline@2.3.0a été publiée sur npm le 17 février 2026Elle est restée en ligne pendant \~8 heures et a installé OpenClaw globalement via un script postinstall
Le binaire CLI lui-même n’a pas été modifié
L’audit de Cline n’a révélé aucune publication non autorisée sur VS Code Marketplace ou OpenVSX
L’avis GitHub évalue la gravité de l’incident comme faible
Ce qui aurait pu se passer :
Un attaquant sophistiqué aurait pu publier une version contenant une porte dérobée de l’extension Cline pour VS Code sur Marketplace et OpenVSX
Avec plus de 5 millions d’installations et les mises à jour automatiques activées, le code malveillant se serait exécuté dans l’environnement IDE de chaque développeur, avec accès aux identifiants, aux clés SSH et au code source
L’attaque ne nécessitait rien de plus qu’un compte GitHub et la connaissance de techniques documentées publiquement
Sécuriser les agents IA dans les pipelines CI/CD
Si vous avez installé cline@2.3.0 via npm :
Désinstallez-le :
npm uninstall -g clineDésinstallez OpenClaw s’il a été installé :
npm uninstall -g openclawRéinstallez la version 2.4.0 ou ultérieure :
npm install -g cline@latestVérifiez qu’aucun paquet npm global inattendu n’est installé sur votre système :
npm list -g --depth=0Faites tourner tous les identifiants accessibles sur la machine affectée
Si vous utilisez l’extension Cline pour VS Code :
L’audit de Cline a confirmé qu’aucune version non autorisée de l’extension n’avait été publiée
L’extension VS Code n’a pas été affectée par cet incident précis
Envisagez de désactiver les mises à jour automatiques des extensions IDE et de vérifier les mises à jour avant de les installer
Protéger vos pipelines CI/CD contre les attaques natives de l’IA
L’incident Cline montre pourquoi les organisations ont besoin de défenses à plusieurs niveaux, couvrant à la fois la sécurité de l’IA et le renforcement traditionnel des pipelines CI/CD.
Pour les équipes qui exécutent des agents IA dans leurs pipelines CI/CD :
Limitez l’accès aux outils. Les agents IA utilisés pour trier les problèmes n’ont pas besoin des permissions
Bash,WriteouEdit. Limitez--allowedToolsau strict nécessaire pour la tâche.N’utilisez pas le cache Actions dans les workflows de publication. Pour les builds qui utilisent des secrets de publication, l’intégrité prime sur la rapidité. L’empoisonnement du cache est un vecteur d’attaque bien documenté dans GitHub Actions.
Isoler les identifiants de publication. Utilisez des espaces de noms distincts et des jetons dédiés aux publications nocturnes et de production. Si votre PAT de publication nocturne peut publier des versions de production, votre pipeline nocturne constitue une surface d’attaque de production.
Assainir les données non fiables. N’insérez jamais directement dans les prompts des agents IA des données contrôlées par les utilisateurs (titres de problèmes, descriptions de PR, corps de commentaires). C’est l’équivalent d’une injection indirecte de prompt à une injection SQL par concaténation de chaînes.
Vérifier rigoureusement la rotation des identifiants. L’incident Cline montre qu’une rotation incomplète des identifiants peut laisser une fenêtre d’exposition. Après une violation, lorsque vous faites tourner vos secrets, vérifiez que chaque jeton a bien été révoqué et envisagez d’utiliser des identifiants à courte durée de vie (comme la provenance OIDC pour npm) afin de réduire l’exposition.
Comment Snyk contribue à sécuriser la chaîne d’approvisionnement des agents IA
Snyk propose plusieurs outils pour se défendre contre les types de vulnérabilités exploités lors de cette attaque. agent-scan (mcp-scan) est un scanner de sécurité open source pour les agents IA, les serveurs MCP et les compétences d’agent. Il détecte automatiquement les configurations MCP et les compétences installées, puis recherche les injections de prompt, l’empoisonnement des outils, le code malveillant et les flux toxiques. Lancez-le avec uvx mcp-scan@latest --skills.
Snyk AI-BOM génère une nomenclature des composants IA de vos projets et identifie les modèles d’IA, les agents, les outils, les serveurs MCP et les jeux de données. Il vous aide à dresser l’inventaire complet des composants IA de votre base de code pour savoir à quels risques vous êtes exposé. Lancez-le avec snyk aibom.
Enfin, Snyk Open Source surveille vos dépendances open source pour détecter les vulnérabilités connues et les paquets malveillants. La base de données de vulnérabilités de Snyk signalerait les versions de paquets compromises comme cline@2.3.0. Pour en savoir plus sur l’approche de Snyk face aux menaces de sécurité natives de l’IA, consultez nos recherches sur l’analyse des flux toxiques, l’injection de prompt dans MCP et le détournement d’agents.
Alors que la vitesse de développement s’accélère à un rythme fulgurant, savez-vous vraiment à quoi votre environnement IA peut accéder ? Téléchargez « La crise de la sécurité de l’IA dans votre environnement Python » pour en savoir plus.
LIVRE BLANC
La crise de la sécurité de l’IA dans votre environnement Python
Avec l’accélération fulgurante du développement, savez-vous vraiment à quoi votre environnement d’IA peut accéder ?
