Skip to content
tutorials

Ce paramètre arrête 99 % des attaques NPM

Les attaques de la chaîne d'approvisionnement NPM explosent, mais un seul paramètre peut en neutraliser la plupart. Cette solution de 30 secondes retarde l'installation de nouveaux packages, donnant à la communauté le temps de repérer les malwares avant qu'ils n'atteignent votre machine.

Dani Roth
Ce paramètre arrête 99 % des attaques NPM

Le vecteur d'attaque NPM est grand ouvert

Les attaques de la chaîne d'approvisionnement logicielle ont considérablement augmenté, évoluant en campagnes sophistiquées qui ciblent directement l'infrastructure de développement. Les acteurs malveillants déploient désormais des tactiques avancées, telles que le ver « Shai-Hulud », spécifiquement conçu pour infiltrer les pipelines CI/CD. Ces campagnes visent à compromettre les environnements de build et à voler les identifiants, accordant aux attaquants un accès profond et persistant au sein des organisations.

Les attaquants visent principalement à exfiltrer des jetons sensibles—comme ceux pour AWS, GitHub, ou npm—qui accordent un accès privilégié aux ressources cloud, aux dépôts de code et aux données utilisateur. Ils y parviennent par diverses méthodes insidieuses, notamment en détournant des packages largement utilisés ou en déployant des sosies malveillants. Cette stratégie de typosquatting trompe les développeurs en leur faisant installer des dépendances compromises, souvent indiscernables des légitimes.

L'échelle colossale de l'écosystème JavaScript présente une surface d'attaque inégalée, ce qui en fait une cible irrésistible pour un compromis généralisé. npm, le package manager par défaut de l'écosystème, héberge désormais plus de 2,5 millions de packages et traite des milliards de téléchargements hebdomadaires. Cette immense interconnexion signifie qu'une seule dépendance compromise ou un package malveillant peut rapidement infecter d'innombrables projets et organisations à l'échelle mondiale, entraînant des failles de sécurité catastrophiques.

Votre période de refroidissement de 30 secondes

Une défense remarquablement simple, mais puissante, contre le torrent d'attaques de la chaîne d'approvisionnement npm existe : la mise en œuvre d'un âge minimal de publication de package. Cette « période de refroidissement » agit comme une mesure de sécurité peu coûteuse et à fort impact, ne coûtant rien à déployer mais offrant une protection significative. Elle empêche l'installation immédiate de code fraîchement publié, un vecteur courant de compromission initiale.

Voici comment cela fonctionne : votre package manager, qu'il s'agisse de npm, pnpm ou Bun, récupère la dernière version de package qui satisfait votre exigence d'âge, et non une publiée il y a quelques instants. Par exemple, si vous définissez un minimum de 24 heures, votre système de build ignorera tout package publié au cours de cette journée. Cela garantit un délai crucial, contournant la fenêtre la plus vulnérable pour les nouvelles versions non vérifiées.

Cette configuration simple s'avère très efficace contre les incidents de type « smash-and-grab » à tir rapide. Elle crée un tampon temporel critique, permettant aux outils de sécurité, aux scanners automatisés et à la communauté open-source vigilante de découvrir et de signaler les packages malveillants avant qu'ils n'infectent votre environnement. pnpm définit même un âge de publication minimal par défaut d'un jour, une base solide que d'autres devraient imiter.

Sécurisez-le : Code pour npm, pnpm & Bun

La mise en œuvre d'un âge de publication minimal offre une amélioration de sécurité rapide et percutante. Ce changement à faible effort réduit considérablement l'exposition aux nouveaux packages malveillants. Voici comment sécuriser votre configuration sur les package managers JavaScript populaires.

Pour npm, appliquez min-release-age dans votre fichier .npmrc global. Définir min-release-age=7 impose une période de rétention de sept jours avant d'installer de nouveaux packages, une fenêtre critique pour la détection des menaces. Assurez-vous que votre npm CLI est en version 11.10.0 ou plus récente pour utiliser cette protection vitale.

pnpm configure minimumReleaseAge dans pnpm-workspace.yaml ou sa configuration globale, mais spécifie la valeur en minutes. Un délai de sept jours nécessite minimumReleaseAge: 10080. Notamment, pnpm définit une valeur par défaut robuste de 24 heures de délai, ouvrant la voie en matière de sécurité proactive. Explorez plus de détails sur Atténuer les attaques de la chaîne d'approvisionnement | pnpm.

Bun, défiant la cohérence de l'écosystème, utilise des secondes pour son minimumReleaseAge. Ajoutez minimumReleaseAge = 604800 sous la section [install] de votre bunfig.toml pour un délai de sept jours. Cette disparité d'unités entre npm, pnpm et Bun met en évidence un point de friction particulier, bien que mineur, pour les développeurs.

Cette configuration simple garantit que vos installations privilégient les versions établies et vérifiées, réduisant drastiquement votre profil de risque contre les attaques de la chaîne d'approvisionnement naissantes.

Cet article vous plaît ? Recevez-en un comme celui-ci chaque matin.

un e-mail par jour · désinscription en deux clics · aucun traqueur tiers

Ce n'est pas une solution miracle

L'âge minimal de publication offre une défense puissante et peu exigeante, bloquant un pourcentage significatif des attaques opportunistes de la chaîne d'approvisionnement. Cependant, ce paramètre crucial ne fonctionne que comme une seule couche au sein d'une stratégie de sécurité robuste et multifacette. Aucune configuration unique n'agit comme une solution complète contre le paysage dynamique des menaces des attaques de la chaîne d'approvisionnement logicielle.

Les développeurs doivent intégrer cette défense avec plusieurs autres pratiques indispensables. Toujours commettre et utiliser des fichiers de verrouillage (par exemple, package-lock.json, pnpm-lock.yaml) pour garantir que chaque installation produit des arbres de dépendances identiques, empêchant les builds non déterministes. De manière cruciale, exécutez npm ci dans tous les pipelines CI/CD ; cette commande effectue une installation propre directement à partir du fichier de verrouillage, contournant la résolution des paquets et garantissant des installations de dépendances précises et reproductibles. De plus, auditez régulièrement les dépendances du projet pour les vulnérabilités connues à l'aide d'outils comme Snyk ou npm audit pour identifier et corriger les risques.

Au-delà des configurations de projets individuels, des améliorations de sécurité plus larges au niveau de l'écosystème sont vitales. Des plateformes comme GitHub promeuvent activement une sécurité renforcée des comptes de développeurs, y compris la 2FA basée sur FIDO obligatoire et l'adoption de la publication de confiance via OpenID Connect (OIDC). Ces initiatives abordent directement les principaux vecteurs de nombreuses attaques de la chaîne d'approvisionnement : les comptes de développeurs compromis et les identifiants volés. En empêchant les téléchargements de paquets non autorisés à la source, ces avancées élèvent significativement la posture de sécurité de l'ensemble de l'écosystème open-source.

Foire aux questions

Qu'est-ce qu'un âge minimal de publication pour les paquets npm ?

C'est un paramètre de sécurité qui empêche votre gestionnaire de paquets d'installer une toute nouvelle version de paquet pendant une période configurée (par exemple, 7 jours), évitant ainsi le code malveillant récemment publié.

Pourquoi retarder l'installation des paquets est-il une bonne mesure de sécurité ?

La plupart des paquets malveillants sont découverts et retirés du registre en quelques heures ou jours. Un délai, ou « période de refroidissement », garantit que vous ne les installez pas pendant cette fenêtre critique à haut risque.

Tous les principaux gestionnaires de paquets prennent-ils en charge cette fonctionnalité ?

Oui. npm utilise min-release-age (jours), pnpm utilise minimumReleaseAge (minutes), Bun utilise minimumReleaseAge (secondes), et Yarn utilise npmMinimalAgeGate.

Quel est un bon âge de publication à définir ?

Une recommandation courante est de 7 jours pour une approche conservatrice. pnpm est maintenant par défaut à 24 heures, ce qui est également une base solide pour prévenir la plupart des attaques de type « smash-and-grab ».

Found this useful? Share it.

For builders

Want Stork to write one of these about your product?

Send us a URL. We use the product, form a view, and publish what we actually think — in 8 languages, labeled Sponsored, with no copy approval on your side. That last part is what makes it worth quoting.

See how it works$500 · AI tools & software only