Guide de survie contre l'attaque de la chaîne d'approvisionnement Axios : 3 niveaux de défense à mettre en place immédiatement par les développeurs de startups
Le récent détournement de la bibliothèque Axios et la propagation du ver Shai-Hulud sont choquants. Ils prouvent qu'un compte de mainteneur de confiance peut être piraté, permettant l'injection directe de code malveillant dans notre base de code. Pour une startup sans équipe de sécurité dédiée, voir ses clés d'accès AWS dérobées via un simple npm install est un désastre. Cependant, en installant des filets de sécurité au niveau du système, vous pouvez couper la route de sortie des données, même si un script malveillant est exécuté.
Fermer les voies d'exfiltration de données au niveau du système
Même si un attaquant exécute du code malveillant lors de l'installation d'un paquet, limiter les transmissions externes non autorisées au niveau du réseau peut réduire à zéro les dommages liés au vol d'identifiants. Par défaut, les groupes de sécurité (Security Groups) AWS autorisent tout le trafic sortant. C'est comme construire une autoroute pour envoyer vos données vers le serveur d'un attaquant.
- Configuration du moindre privilège pour les groupes de sécurité : Dans la console AWS, supprimez toutes les règles de sortie existantes. N'autorisez explicitement que les ports de base de données spécifiques nécessaires au service et les plages d'adresses IP des domaines d'API externes enregistrés sur liste blanche (port 443).
- Mise en place d'un proxy sortant : Installez un proxy open source comme Squid pour bloquer les communications directes entre vos machines de développement et l'extérieur. Comparez les en-têtes Host ou les informations SNI pour ne laisser passer que les domaines approuvés comme
registry.npmjs.org.
- Isolation des variables d'environnement : Abandonnez les fichiers
.env. Utilisez AWS Secrets Manager et créez une couche qui charge les secrets uniquement en mémoire via le SDK lors de l'exécution de l'application.
Cela neutralise physiquement les attaques de vers comme Shai-Hulud 2.0 qui fouillent le système de fichiers pour voler les fichiers .env.
Automatisation de la vérification de l'intégrité et du verrouillage des versions
L'attaque survient souvent lorsque les versions des dépendances augmentent sans que le développeur ne s'en aperçoive. npm install risque de modifier le fichier package-lock.json en résolvant des plages de versions flexibles (^1.0.0). Vous devez utiliser les fonctions de vérification d'intégrité des gestionnaires de paquets de manière très stricte.
- Verrouillage strict des versions : Ajoutez
save-exact=true dans votre fichier .npmrc. Cela force l'enregistrement de tous les paquets avec une version exacte, sans l'accent circonflexe (^).
- Remplacement des commandes : Dans vos scripts de build et de déploiement, remplacez
npm install par npm ci. Si le contenu diffère ne serait-ce qu'un peu de package-lock.json, l'installation est refusée et le build s'arrête immédiatement.
- Correction forcée des sous-dépendances : Si une version infectée comme Axios v1.14.1 pose problème, inscrivez
"axios": "1.14.0" dans le champ overrides de votre package.json. Toutes les dépendances indirectes seront ainsi fixées sur une version sûre.
Comme npm ci supprime le dossier node_modules existant avant de réinstaller, il ne laisse aucune chance aux fichiers contaminés de subsister. En prime, cela accélère le build car le calcul des dépendances est ignoré.
Mise en place de barrières de sécurité dans le pipeline CI/CD
Comme un humain ne peut pas vérifier chaque paquet manuellement, le pipeline doit pouvoir exercer son droit de veto. npm audit ne consulte que les bases de données de vulnérabilités (CVE) déjà connues. Ses limites sont évidentes pour détecter les attaques zero-day ou les comportements malveillants inconnus.
- Intégration de Socket.dev : Connectez la CLI Socket à votre dépôt GitHub. Elle analyse en temps réel plus de 70 signaux de danger, comme l'accès d'un paquet au réseau ou l'exécution de commandes shell.
- Application de Harden-Runner : Intégrez Harden-Runner de StepSecurity à vos GitHub Actions. Basé sur eBPF, il surveille toutes les requêtes sortantes générées pendant le build et bloque les accès aux domaines non approuvés.
- Politiques de Lint personnalisées : Utilisez la règle
no-restricted-imports d'ESLint pour interdire l'usage de bibliothèques spécifiques comme Axios et forcer l'utilisation d'un client HTTP vérifié en interne au niveau du code.
L'adoption d'une analyse basée sur le comportement comme Socket.dev peut vous faire gagner plus de 2 heures par semaine en temps d'investigation manuelle en cas d'incident de sécurité.
| Outil |
Méthode d'analyse |
Effet de l'adoption |
| npm audit |
Comparaison CVE DB |
Outil intégré, analyse statique des vulnérabilités |
| Socket.dev |
Analyse comportementale |
Détection de motifs de codes malveillants inconnus |
| Harden-Runner |
Surveillance runtime eBPF |
Blocage des requêtes réseau suspectes du serveur de build |
Investigation des traces d'intrusion et récupération
Si vous apprenez l'attaque par les informations, il est peut-être déjà trop tard. Parcourez les journaux système et l'activité réseau pour vérifier si votre environnement a été compromis. Le code malveillant envoie généralement d'abord une requête DNS pour communiquer avec son serveur C2 (Command & Control). Ces enregistrements sont les indices les plus fiables.
- Analyse des journaux de requêtes DNS : Utilisez
tcpdump pour rechercher des requêtes contenant des mots-clés liés à sfrclak.com ou plaincryptojs. Si vous en trouvez, isolez immédiatement la machine.
- Détection de processus anormaux : Utilisez la commande
ps -ef pour vérifier si des processus enfants de npm tels que bun ou powershell sont actifs.
- Rotation des identifiants : S'il y a le moindre soupçon de compromission, changez toutes les clés d'accès AWS, les jetons NPM et les mots de passe de base de données. Vous devez également invalider toutes les sessions existantes.
Les attaquants essaient d'effacer leurs traces, mais ils tentent souvent de maintenir leur présence en créant des processus inattendus autres que node ou en injectant des fichiers YAML suspects sous .github/workflows/. Vérifiez minutieusement si de nouveaux fichiers non détectés par git status sont apparus. En structurant ce filet de sécurité à trois niveaux — liste blanche réseau, npm ci et outils d'analyse runtime — vous réduirez considérablement l'anxiété liée aux actualités sur la cybersécurité.