Le 22 mai 2026, un simple upload PyPI nommé eth-security-auditor a discrètement ouvert la voie à l'une des campagnes de supply chain les plus inédites de l'année. En quelques jours, les chercheurs de Socket avaient répertorié 34 paquets malveillants et 384 versions à travers npm, PyPI et Crates.io, tous liés à un opérateur unique baptisé TrapDoor. Ce qui distingue TrapDoor des attaques précédentes contre les registres n'est pas son ampleur. C'est la première campagne largement observée à militariser délibérément les assistants de codage IA comme Cursor et Claude Code en tant que canal d'exfiltration.
Si votre équipe utilise des outils de pair-programming IA et tire des dépendances open-source, cette attaque vous vise directement.
TrapDoor en 60 secondes
TrapDoor est un voleur multi-écosystème de cryptomonnaies et d'identifiants qui se déguise en outillage de sécurité pour développeurs. Les noms des paquets piégés sont choisis pour paraître indispensables : wallet-security-checker, defi-threat-scanner, solidity-deploy-guard, prompt-engineering-toolkit, sui-move-build-helper. Un développeur cherche un audit rapide, installe l'un d'eux, et la charge utile s'exécute immédiatement.
La campagne cible simultanément quatre communautés qui se recoupent :
- Les développeurs crypto et DeFi travaillant sur Solana, Sui, Aptos et les chaînes EVM
- Les développeurs IA et d'agents utilisant LangChain, LlamaIndex, MetaGPT, browser-use, OpenHands
- Les ingénieurs DevOps qui font tourner des pipelines CI/CD avec dépendances en cache
- Les fondateurs solo et développeurs indépendants qui installent souvent des paquets non audités sur leur machine principale
Trois écosystèmes, trois chemins d'exécution
Les auteurs de TrapDoor ont personnalisé le déclencheur pour chaque registre — un niveau de sophistication inhabituel pour un voleur opportuniste.
npm — hooks postinstall. Dès que vous lancez npm install, le paquet déclenche un script postinstall qui charge trap-core.js, une charge utile de 1 149 lignes utilisant les chiffrements Fernet et ECDH pour le trafic de commande et contrôle. Pas besoin d'importer le paquet ; l'installation seule suffit.
PyPI — exécution à l'import. Le code malveillant s'exécute dès le premier import dans n'importe quel script, même une ligne de test. La charge utile télécharge ensuite du JavaScript supplémentaire depuis GitHub Pages, permettant à l'opérateur de pousser une nouvelle logique sans publier une nouvelle version.
Crates.io — canal latéral via build.rs. C'est le plus pernicieux. Le script build.rs de Rust s'exécute pendant cargo build, avant même que votre code n'appelle la dépendance. Un simple cargo check sur un projet listant le paquet suffit à compromettre la machine du développeur. La charge utile Crates utilise un chiffrement XOR avec la clé codée en dur cargo-build-helper-2026 et cible spécifiquement les keystores Sui et Move.
La nouvelle frontière : empoisonner .cursorrules et CLAUDE.md
C'est ici que TrapDoor innove vraiment.
Une fois la charge utile installée, elle ne se contente pas d'exfiltrer les secrets du jour. Elle plante des instructions cachées dans les fichiers .cursorrules et CLAUDE.md à l'aide de caractères Unicode de largeur zéro, invisibles dans les éditeurs mais lisibles par les assistants de codage IA. Ces instructions trompent Cursor, Claude Code et outils similaires pour qu'ils lancent un faux « scan de sécurité » à la prochaine ouverture du projet. Ce scan exfiltre silencieusement les clés SSH, identifiants AWS, jetons GitHub, données de session du navigateur et toutes les keystores de portefeuilles qu'il trouve — le tout sous le couvert d'une activité légitime de l'assistant.
L'opérateur derrière TrapDoor a même documenté cette approche dans un fichier nommé AUDIT-MATRIX.md, hébergé sur GitHub Pages et décrit comme un « Universal AI Agent Extraction Framework ». Le même opérateur (ddjidd564) a ouvert des pull requests sur de vrais dépôts IA — LangChain, LlamaIndex, MetaGPT, browser-use, OpenHands — espérant qu'un mainteneur fusionnerait un CLAUDE.md empoisonné dans le projet officiel.
C'est un changement majeur. Jusqu'à présent, les attaquants de supply chain devaient garder leur charge utile petite et discrète pour éviter la détection. TrapDoor, au contraire, délègue le travail bruyant à l'agent IA du développeur lui-même, qui s'exécute avec les permissions et la confiance du développeur.
Ce que TrapDoor vole
La liste des données ciblées ressemble à un dossier complet sur la vie d'un développeur moderne :
- Clés SSH privées depuis
~/.ssh - Identifiants AWS et variables d'environnement
- Jetons GitHub et GitLab
- Identifiants navigateur et données d'extensions de portefeuilles crypto (MetaMask, Phantom, Backpack)
- Keystores Solana, Sui et Aptos
- Clés API pour OpenAI, Anthropic et les principaux fournisseurs SaaS
- Fichiers
.env,.envrcet configurations de développement locales
Les identifiants volés sont validés en direct contre les API respectives avant exfiltration, donc l'opérateur ne stocke que des clés réellement fonctionnelles.
Persistance — il reste après désinstallation
Supprimer le paquet malveillant ne nettoie pas la machine. TrapDoor installe sa persistance via :
- Des hooks Git comme
post-checkoutetpre-commit - Des fichiers de démarrage de shell (
.zshrc,.bashrc,.profile) - Des tâches cron et unités
systemdutilisateur - Des fichiers
.cursorruleset CLAUDE.md empoisonnés laissés dans les dépôts clonés
Le vecteur .cursorrules est particulièrement vicieux car le fichier est souvent commité et partagé avec les coéquipiers, transformant un seul développeur compromis en point de propagation à travers toute l'organisation d'ingénierie.
Ce qu'il faut auditer aujourd'hui
Si vous expédiez du code, lancez ces cinq vérifications avant votre prochain déploiement.
1. Cherchez les noms de paquets connus dans les lockfiles
grep -rE "wallet-security-checker|defi-threat-scanner|solidity-deploy-guard|prompt-engineering-toolkit|sui-move-build-helper|eth-security-auditor|cryptowallet-safety|defi-risk-scanner|chain-key-validator|move-compiler-tools" \
package-lock.json yarn.lock pnpm-lock.yaml requirements.txt poetry.lock Cargo.lock 2>/dev/nullToute correspondance signifie : faites tourner toutes les clés et reconstruisez la machine depuis une image propre.
2. Inspectez les fichiers de configuration IA à la recherche d'Unicode caché
find . \( -name ".cursorrules" -o -name "CLAUDE.md" -o -name ".clinerules" \) \
-exec perl -ne 'print "$ARGV:$.: $_" if /[\x{200B}-\x{200F}\x{2028}-\x{202F}\x{FEFF}]/' {} \;Des caractères de largeur zéro dans un fichier d'instructions sont un signal d'alerte, sans exception. Les fichiers légitimes n'en ont pas besoin.
3. Auditez les scripts postinstall récents de npm
npm ls --all --json | jq '.dependencies | to_entries[] | select(.value.scripts.postinstall)'Recoupez chaque hit avec le code source publié du paquet sur sa page de registre.
4. Désactivez l'exécution des scripts de build par défaut
# pnpm
pnpm config set side-effects-cache false
pnpm config set enable-pre-post-scripts false
# npm
npm config set ignore-scripts trueRéactivez uniquement pour les paquets de confiance. Cette seule bascule aurait bloqué net les chemins d'exécution npm et Rust.
5. Faites tourner les jetons API des assistants IA
Si votre machine a exécuté l'un des paquets listés cette dernière semaine, considérez vos jetons Anthropic, OpenAI, GitHub et fournisseurs cloud comme compromis. Faites-les tourner et vérifiez les journaux d'audit pour des appels API inattendus.
Pourquoi cela compte pour les équipes MENA
De nombreuses équipes d'ingénierie en Tunisie, Arabie saoudite, Émirats et Égypte ont adopté Cursor, Claude Code et assistants IA similaires durant la dernière année, souvent plus vite qu'elles n'ont déployé de contrôles formels de supply chain. La conception de TrapDoor mise exactement sur cet écart. La combinaison d'une adoption rapide des outils IA et d'une adoption lente de l'outillage de sécurité est le substrat idéal pour l'attaquant.
Concrètement, ce que nous recommandons à nos clients :
- Traitez
.cursorruleset CLAUDE.md comme des fichiers sensibles à la sécurité. Revue de code à chaque changement, au même titre queDockerfileou.github/workflows/. - Imposez
ignore-scriptspar défaut dans les runners CI et verrouillez le comportement d'installation des paquets dans l'image de base, pas dans le projet. - Mettez en place Socket, Snyk ou
osv-scannerdans les vérifications pré-merge. Le temps médian de détection de TrapDoor était sous six minutes — votre CI peut intercepter un paquet malveillant avant qu'il n'atterrisse sur le laptop d'un développeur. - Mettez les nouvelles dépendances en quarantaine pendant 24 heures avant de les autoriser dans les projets de production. La plupart des charges utiles de supply chain sont retirées dans les heures qui suivent la divulgation.
La leçon plus large
TrapDoor est le moment où les outils de codage IA ont officiellement rejoint la surface d'attaque de la chaîne d'approvisionnement. La logique économique pour les attaquants est imparable : un seul CLAUDE.md empoisonné commité dans un dépôt populaire peut détourner des centaines d'agents en aval, chacun disposant d'un accès en lecture complet à la machine et aux comptes cloud de son développeur. Il faut s'attendre à plus de cela, pas moins.
La défense n'est pas d'arrêter d'utiliser les outils IA — ce train est parti. La défense est d'appliquer aux fichiers de configuration que lisent nos agents IA la même discipline d'ingénierie qu'aux images Docker, aux politiques IAM et aux runners CI. Versions épinglées. Revue obligatoire. Analyse statique de l'Unicode caché. Moindre privilège pour les jetons. Les fondamentaux fonctionnent encore ; ils doivent juste s'étendre à la nouvelle surface.
Si vous souhaitez une revue concrète du pipeline d'outils IA et de dépendances de votre équipe face au modèle d'attaque TrapDoor, contactez l'équipe sécurité de Noqta. La prochaine campagne se prépare déjà.