Ce qui rend TrapDoor particulièrement dangereux n'est pas seulement sa portée multi-écosystèmes, mais une nouvelle technique d'évasion qui arme les assistants de codage IA eux-mêmes. Le malware dissimule des instructions cachées dans les fichiers .cursorrules et CLAUDE.md en utilisant des caractères Unicode de largeur nulle, totalement invisibles pour un relecteur humain mais lisibles par des outils comme Cursor et Claude Code. Ces derniers peuvent alors être manipulés pour exfiltrer des secrets sous couvert de simples « analyses de sécurité » de routine .
La campagne TrapDoor a opéré simultanément sur trois registres majeurs de l'open source, en utilisant des mécanismes techniques distincts adaptés à chaque plateforme .
La majorité des packages malveillants est apparue sur npm, le gestionnaire de packages de Node.js. Ils utilisaient des scripts postinstall pour exécuter automatiquement un collecteur d'identifiants dès l'installation. La charge utile principale, un script d'environ 1 149 lignes nommé trap-core.js, analyse systématiquement l'environnement de la victime à la recherche de secrets et les exfiltre vers une infrastructure contrôlée par les attaquants .
Les packages Python distribués via PyPI étaient conçus pour télécharger et exécuter une charge utile JavaScript distante au moment de l'importation. Une fois actifs, ils déployaient la même logique de vol d'identifiants que les variantes npm .
Sur le registre principal de l'écosystème Rust, les packages malveillants exploitaient les scripts build.rs pour exécuter le code d'exfiltration d'identifiants pendant le processus de build, garantissant ainsi leur exécution avant même que la fonctionnalité prévue du package ne soit utilisée .
Les packages étaient déguisés en outils de développement légitimes avec des noms comme token-usage-tracker, prompt-engineering-toolkit ou eth-wallet-security-auditor, les faisant paraître utiles aux communautés de développeurs ciblées .
La charge utile de TrapDoor traque systématiquement un large éventail de secrets à haute valeur. Selon l'analyse de Socket, le malware collecte :
Parmi les cibles spécifiques aux portefeuilles explicitement mentionnées figurent les données des extensions de navigateur MetaMask et Phantom . Le vol de tokens GitHub est particulièrement préoccupant, car il peut permettre aux attaquants d'accéder à des dépôts de code source privés, d'injecter du code malveillant dans des pipelines CI/CD, ou de se déplacer latéralement en usurpant l'identité de développeurs compromis
.
L'enquête de Socket a identifié les développeurs crypto, DeFi, Solana, Sui, Move et IA comme les cibles principales . Les conventions de nommage des packages faisaient directement appel à ces communautés, avec des thèmes autour de l'audit de sécurité de portefeuilles, de la surveillance de transactions, du développement de contrats intelligents (">smart contracts") et d'outils de contexte pour l'IA.
Les attaquants ont compris que les développeurs de ces écosystèmes détiennent régulièrement des clés de portefeuilles pour des actifs significatifs, accèdent à des infrastructures cloud et possèdent des permissions privilégiées à travers les chaînes d'outils de développement. Un seul poste de travail compromis devient ainsi une porte d'entrée vers des dommages financiers et opérationnels considérables .
L'aspect techniquement le plus novateur de TrapDoor est l'exploitation de la relation de confiance avec les assistants de codage IA. Le malware tente de modifier ou de déposer des fichiers .cursorrules et CLAUDE.md — des fichiers de configuration que les développeurs utilisent pour donner des instructions spécifiques à un projet aux outils de codage IA comme Cursor et Claude Code .
À l'intérieur de ces fichiers, les attaquants intègrent des instructions cachées en utilisant des caractères Unicode de largeur nulle (tels que U+200B, U+200C et U+FEFF). Ces caractères sont invisibles dans les éditeurs de texte et lors d'une revue de code standard. Un développeur humain ne voit donc rien de suspect . Cependant, les assistants de codage IA analysent l'intégralité du texte Unicode et peuvent être trompés pour interpréter ces instructions cachées comme des commandes légitimes, pouvant exécuter des workflows de collecte d'identifiants, exfiltrer du code source, ou lancer des commandes shell arbitraires à l'insu du développeur
.
Cela crée une compromission en deux étapes : le package infecte l'environnement du développeur et vole les identifiants immédiats, tandis que le fichier de configuration IA empoisonné arme les propres outils d'IA du développeur pour une exploitation ultérieure. Des recherches connexes ont confirmé que des plateformes d'agents IA en production, y compris Claude Code et GitHub Copilot, peuvent exécuter des commandes arbitraires intégrées sous forme d'instructions Unicode invisibles dans des fichiers de compétences d'agents .
L'infrastructure de détection de Socket a identifié les publications de TrapDoor avec un temps de détection médian de seulement 5 minutes et 27 secondes, le record de détection le plus rapide s'établissant à 58 secondes . Cette identification rapide a permis aux chercheurs de relier ces publications de packages apparemment dispersées en une seule campagne coordonnée en moins de 48 heures après le premier dépôt suspect
.
L'ensemble des 34 packages identifiés à travers les trois registres a été signalé aux mainteneurs respectifs pour retrait .
Si vous ou votre équipe avez installé l'un de ces packages, agissez immédiatement. Ne vous contentez pas de désinstaller le package : la compromission peut persister.
Lancez les commandes npm auditpip checkCargo.lock pour détecter les noms des packages malveillants connus. Parcourez l'historique de vos fichiers de lock dans Git à la recherche de ces noms. Supprimez toute correspondance et exécutez une installation propre (npm cipip installcargo build.
Vérifiez les fichiers comme ~/.bashrc, ~/.zshrc, ~/.profile ou ~/.config/fish/config.fish. Cherchez la présence d'alias suspects ou de commandes non commentées utilisant curl ou wget qui pourraient établir une persistance à chaque ouverture de terminal .
Examinez le dossier .git/hooks/ dans chacun de vos dépôts pour détecter des hooks non autorisés de type pre-commit, post-commit, ou pre-push. Le ciblage des tokens GitHub par la campagne rend très probable une compromission des dépôts au niveau du compte .
Examinez le dossier .github/workflows/ à la recherche de fichiers de workflow inattendus, d'étapes suspectes avec curl ou wget, ou d'actions tierces non autorisées. Consultez les journaux d'exécution des Actions pour identifier des requêtes réseau sortantes inhabituelles.
Recherchez dans tous vos projets la présence de fichiers .cursorrules et CLAUDE.md contenant des caractères Unicode de largeur nulle. Utilisez la commande suivante dans votre terminal :
grep -P '[\x{200B}-\x{200F}\x{2028}-\x{202F}\x{FEFF}]' .cursorrules CLAUDE.mdSi ces fichiers existent et contiennent de tels caractères, supprimez-les après avoir vérifié leur contenu avec un éditeur hexadécimal .
Le malware peut survivre à une simple désinstallation. Vérifiez les tâches planifiées (crontab -l~/.config/systemd/user/) et, sur macOS, les LaunchAgents (~/Library/LaunchAgents/) .
Intégrez des outils de scan de sécurité de la chaîne d'approvisionnement dans votre pipeline CI pour détecter les packages suspects avant leur installation. Envisagez l'utilisation d'outils de détection en temps réel qui surveillent l'accès aux fichiers de portefeuille, aux clés SSH, aux identifiants cloud et aux répertoires de données de navigateur .
Comments
0 comments