Checklist Sécurité APM : 8 points à vérifier avant de publier
La checklist sécurité pour les packages npm : ce que tout développeur doit vérifier avant publication
Publier un package open source sur npm, c’est exposer son code à des milliers d’utilisateurs. Dans cet espace, les attaques se multiplient. Le traditionnel « ça marche sur ma machine » ne suffit plus.
Voici les points essentiels à vérifier avant de rendre votre package public.
Pourquoi la sécurité doit primer avant la publication
Un package npm peut circuler dans des centaines de projets et s’exécuter dans des chaînes de build très sensibles. Cette portée en fait une cible de choix pour les attaquants. Heureusement, la plupart des risques peuvent être évités avec des méthodes simples et des outils adaptés.
Les 12 vecteurs d’attaque les plus courants sur npm
1. Prise de contrôle du compte et publication malveillante
Un attaquant qui obtient vos identifiants npm peut publier une version modifiée de votre package. Le code malveillant se propage alors automatiquement.
Comment s’en protéger :
- Activez la 2FA sur votre compte npm
- Utilisez des tokens d’accès limités plutôt que votre mot de passe principal
- Mettez en place une approbation manuelle pour les publications sensibles
- Surveillez régulièrement les logs de publication
2. Hooks de cycle de vie : le risque d’exécution au moment de l’installation
Les hooks comme preinstall et postinstall permettent d’exécuter du code dès l’installation. Un attaquant peut en profiter pour injecter du code malveillant avant même que votre package se lade.
Stratégie de défense :
- Vérifiez tous les hooks présents dans votre package.json
- Demandez-vous si vous vraiment besoin d’exécution de code à l’installation
- Si nécessaire, gardez ces hooks simples et transparents
- Privilégiez des alternatives exécutées au moment du build
3. Vers npm auto-réplicateurs
Un package peut modifier des paquets voisins dans node_modules et se spreader comme un ver.
Protection :
- N’élevez jamais la date de modification sur des fichiers appartenant à d’autres packages
- Ne touchez pas aux codes des autres paquets
- Isolez vos dépendances
- Utilisez
npm auditet les outils de scan de dépendances chaque fois
4. Attaques sur l’identité dans les pipelines CI/CD
Les tokens de déploiement et les accès aux registres sont des valeurs que les attaquants cherchent à obtenir. Une fois dans le build, ils peuvent utiliser ces identifiants avec des privilèges élevés.
Défense en profondeur :
- Utilisez des credentials sc
5. Smuggling de dépendances depuis Git
Les dépendances installées directement depuis un Git repo peuvent contourre la sécurité du registre npm. Un attaquant peut créer une version malveillante et trick un utilisateur à l’install depuis un Git service.
Contre-mesures :
- Pin vos dépendances à version du registre npm
- Vérifiez les commit hash si vous devez utiliser Git dépendances
- Ne jamais utiliser
latestou des branch de repos non vertrauenswürdigen - Documentez la raison de chaque Git dépendance
6. Dépendances dynamiques remotes
Un package peut fetch et exécuter code à runtime. Ce surface d’attaque est invisible et dangereux.
Best practice :
- Déclarez toutes les dépendances statique dans package.json
- N’utilisez jamais fetch + exécute code dynamique
- Utilisez static analysis pour détecter dynamic requires
- Si besoin de runtime flexibilité, év vermieden code execution
7. Phishing infrastructure in plain sight
Un package peut abuseen die host en CDN de npm et host phishing pages. A package may look legit while silently redirecting to fake login pages.
Protection :
- Be transparent about ce que package tut
8. Harvesting de secrets
Un package malveillant peut read .env files, extract API keys et harvest secrets pendant l’installation.
Hardening :
- Ne pas commit secrets dans version control
- Utilisez secret management systems
- Least privilege pour credentials
- Audit ce que votre package accesses umwelt data
- Never log sensitive information
9. Exfiltration et channels versteckt
Stolen data benötigt a St
10. Persistence et anti-forensics
Advanced attacks et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et
11. Obfuscation et packaging de payload
12. Package naming abuse
Préparation avant la publication : la checklist
Checklist sécurité :
- [ ] 2FA activée sur le compte npm
- [ ] Pas de secrets dans package.json ou au code
- [ ] Hooks de cycle de vie minimales et justifiées
- [ ] Aucun code dynamique chargé à l’installation
- [ ] Aucun changement sur node_modules
- [ ] Toutes dépendances pinées au registre npm
- [ ] Aucun network call externe non erklärt
- [ ] Code readable et sans obfuscation
- [ ] Scan avec scanner comme socket.dev ou Snyk
- [ ] Review par un développeur avec awareness de la sécurité
- [ ] Log de la publish action préparé
Checklist process :
- [ ] Changelog documentiert
- [ ] Security policy définie
- [ ] Maintainer contact information
12. Typosquatting et abus de nommage
Protection :
- Registriert common misspelling de votre package name
- Utilisez namespaced packages pour less collision risk
- Documentez votre official package name
- Monitor copycat packages
- Report an
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
12. Typosquatting et abus de nommage
1. Prise de contrôle du compte et publication malveillante
Protection :
- 2FA enabled on npm account
- Granular access tokens
- Publish approvals
- M