npm 安全:GitHub 的平衡之术

La sécurité de npm, un jeu d’équilibriste pour GitHub

Silicon.fr by Clément Bohic 2026-06-12 15:18 Original
摘要
GitHub因大规模攻击收紧npm安全,已淘汰传统令牌并将写入令牌默认有效期缩至7天,同时推迟删除TOTP;本地发布改用有效期12小时的短暂令牌,npm v12还将默认禁用依赖的安装脚本和远程依赖解析以阻断代码执行风险。为缓解摩擦,GitHub力推基于OIDC的可信发布,但该机制目前仅支持GitHub Actions、GitLab CI/CD及CircleCI三个CI/CD平台。

GitHub近年来持续强化npm生态的安全防线,但每一次收紧都在便利性与防护力之间引发新的摩擦。2025年9月底,在一场大规模攻击后,GitHub宣布了一系列安全变革:淘汰传统的静态令牌(legacy tokens),要求有写入权限的细粒度令牌(granular tokens)必须设定有效期——最高90天,默认仅7天,而此前默认为30天。同时,计划在数月内移除基于TOTP的一次性密码认证,理由是TOTP易受钓鱼和中继攻击,并力推抗钓鱼能力更强的通行密钥(passkey)。

社区对此反应剧烈,尤其反对取消TOTP。开发者指出,通行密钥不利于自动化系统,终端直接发布包(无需跳转浏览器)的便利性无可替代,有人直言“通行密钥不够便携”。面对压力,GitHub虽未撤回原则,但大幅推迟了TOTP的移除时间表,表示要等到其他安全措施被广泛采纳后再行动。

传统令牌的淘汰同样一波三折,多次推迟后终于在2025年12月初落地。用于本地发布的临时令牌最初仅有2小时有效期,在用户抗议后放宽至12小时。GitHub仍建议:将此临时令牌仅用于发布操作,而对私有包的持续访问应使用只读的细粒度令牌。与此同时,新创建的包默认强制启用双因素认证(2FA),任何发布都需通过2FA。

将于2026年7月随npm v12生效的新规更具颠覆性:默认禁用依赖项中的preinstall、install和postinstall脚本执行,包括node-gyp原生构建的隐式调用。这直接影响bcrypt、canvas、sharp及数据库驱动等包,以及Cypress、Playwright、Puppeteer等通过postinstall下载二进制文件的工具。此外,默认禁止从远程URL(包括https tarballs)解析依赖(--allow-remote),此前已在2月禁用了直接或间接的Git依赖解析(--allow-git),以此堵死通过.npmrc绕过`--ignore-scripts`等代码执行路径。目前,针对本地文件(--allow-file)和目录(--allow-directory)的限制尚未调整。

TOTP的最终淘汰还将取决于Trusted Publishing的普及。该机制由OpenSSF定义,通过OIDC在npm与CI/CD服务之间建立信任,PyPI于2023年率先引入。npm自2025年7月提供此功能,但目前仅支持GitHub Actions(自托管运行器)、GitLab CI/CD(共享运行器)和CircleCI(云端版)。配套的批量编辑功能直到2026年2月才上线,而Dependabot的依赖恶意软件检测也于3月推出新版——此前因公有与私有包命名冲突导致大量误报,该功能在2022年曾被暂停。这些进展显示,GitHub仍在平衡木上谨慎前行,安全强化与生态兼容的角力远未结束。

Summary
GitHub is tightening npm security by removing legacy tokens, capping write token lifetimes to 90 days (7 days default), and from npm v12 disabling install scripts and remote dependency resolution by default, following a major 2025 attack. It delayed plans to eliminate TOTP authentication after community pushback over passkey limitations in automated workflows, and expanded ephemeral token duration to 12 hours. Trusted publishing via OIDC is live for GitHub Actions, GitLab CI/CD, and CircleCI, but limited support slows broader adoption of passwordless authentication.

In late September 2025, following a large-scale attack on npm, GitHub announced a sweeping set of security measures. The plan included removing legacy tokens within weeks, capping the lifetime of write-enabled granular tokens at 90 days (defaulting to 7 days, down from 30), and eventually deprecating TOTP-based two-factor authentication in favor of passkeys. GitHub argued passkeys are not vulnerable to phishing and relay attacks, but the npm community objected: passkeys are impractical for automated systems, and terminal-based publishing without a browser is widely preferred. GitHub delayed the TOTP phaseout, stating in February 2026 that it would not proceed until other measures were embraced.

The removal of legacy tokens was itself postponed several times, finally taking effect in early December 2025. For local publishing, they were replaced by ephemeral tokens initially valid for only two hours. After developer pushback, that window was extended to 12 hours, though GitHub still recommends using read-only granular tokens for ongoing access to private packages. Simultaneously, two-factor authentication is now enabled by default when creating new packages, making it mandatory for publication.

Further tightening arrives with npm v12, expected in July 2026 (currently emitting warnings). By default, the execution of `preinstall`, `install`, and `postinstall` scripts from dependencies will be disabled. This includes the implicit `node-gyp rebuild` for native modules, affecting packages such as `bcrypt`, `canvas`, `sharp`, database drivers, and tools like Cypress, Playwright, and Puppeteer that download binaries via `postinstall`. Additionally, resolving dependencies from remote URLs (`--allow-remote`), including HTTPS tarballs, will be switched off by default. This builds on the existing default block on Git dependency resolution (`--allow-git`) introduced in February, which closed a code-execution vector where a dependency’s `.npmrc` could bypass the executable restriction even with `--ignore-scripts`. The flags `--allow-file` and `--allow-directory` remain unchanged.

The deprecation of TOTP is also tied to the uptake of trusted publishing, an OpenSSF standard that uses OIDC to establish trust between npm and CI/CD providers. Available on npm since July 2025, it currently supports only GitHub Actions managed runners, GitLab CI/CD shared runners, and CircleCI’s cloud version. Batch editing of trusted publishing configurations was added in February 2026. In March 2026, GitHub relaunched Dependabot’s malware detection for dependencies—suspended in 2022 due to false positives from name collisions between public and private packages—adding another layer to the evolving security framework. The balancing act between tighter security and developer friction continues.

Résumé
GitHub renforce la sécurité de npm avec la suppression des tokens classiques et le plafonnement des tokens granulaires, tout en repoussant la fin du TOTP sous la pression de la communauté qui juge les clés de passe peu adaptées à l’automatisation. La future version npm v12 désactivera par défaut les scripts d’installation des dépendances, impactant des paquets comme bcrypt ou Cypress.

Ajoutez les clés de passe si vous voulez, mais ne supprimez pas le TOTP.

Cette demande est emblématique de la friction que GitHub a engendrée avec son dernier train de mesures de sécurité pour npm.

Il avait annoncé la couleur fin septembre 2025, dans la lignée d’une attaque d’ampleur sur le gestionnaire de paquets. Dans un horizon de quelques semaines, les tokens « classiques » (legacy) seraient supprimés. Quant aux tokens granulaires avec des permissions en écriture, ils ne pourraient plus avoir une durée de vie illimitée. Mi-octobre, celle-ci passerait à 90 jours maximum… et à 7 jours par défaut (contre 30 auparavant).

Le timing pour supprimer TOTP était (beaucoup) trop court

GitHub prévoyait aussi qu’à échéance de « quelques mois », l’authentification forte par code TOTP ne soit plus disponible. Il le justifiait essentiellement par la vulnérabilité du protocole au phishing et aux attaques par relais. Risques auxquels, expliquait-il, les clés de passe ne sont pas exposées, même si le générateur lui-même est compromis.

Dans la communauté npm, on lui a fait remarquer que l’approche passkey n’était pas idéale pour les systèmes automatisés. Et que finalement, il était bien pratique de pouvoir publier depuis le terminal sans avoir à s’authentifier dans un navigateur. Certains furent plus offensifs, invoquant un verrouillage (« Les clés de passe ne sont pas si portables »…).

Au bout du compte, GitHub a maintenu le cap… mais a remis les choses à bien plus tard. En février, il expliquait encore ne pas avoir l’intention de supprimer le TOTP avant que le reste de ses mesures de sécurité aient été largement adoptées.

Des tokens finalement un peu moins éphémères

La suppression des tokens classiques fut elle aussi repoussée à plusieurs reprises. Elle est finalement intervenue début décembre. S’y sont substitués, pour la publication locale, des tokens éphémères, initialement valables 2 heures. Interpellé sur les contraintes que cela représentait, GitHub a fini par élargir la fenêtre à 12 heures. Non sans recommander de limiter ces tokens à la publication et d’utiliser des tokens granulaires en lecture seule pour l’accès continu aux paquets privés.

Parallèlement au plafonnement de la durée de vie des tokens granulaires avec droits en écriture, le paramétrage standard des paquets a évolué.  À leur création, le 2FA s’active par défaut, conditionnant toute publication.

GitHub serre la vis sur les scripts install

La dernière mesure annoncée s’appliquera à partir de npm v12, attendu pour juillet (elle émet pour le moment des alertes). Elle désactive, par défaut, l’exécution des scripts preinstall, install et postinstall depuis des dépendances. Cela inclut les builds node-gyp natifs (qui exécutent un node-gyp rebuild implicite). Attention donc à des paquets comme bcrypt, canvas, sharp et les pilotes de bases de données. Ainsi qu’à Cypress, Playwright et Pupeteer, mais pour une autre raison : ils téléchargent des binaires via postinstall.

Un autre comportement disparaîtra par défaut : la résolution des dépendances depuis des URL distantes (–allow-remote), y compris les tarballs https. La même chose s’applique depuis février à la résolution de dépendances Git directes ou transitives (–allow-git). Elle bloque un vecteur d’exécution de code (le .npmrc d’une dépendance Git pouvant passer outre l’exécutable, même avec –ignore-scripts).

Pour le moment, GitHub n’annonce pas de changement de comportement pour les drapeaux –allow-file et –allow-directory.

Le trusted publishing, en manque de fournisseurs CI/CD

La suppression de TOTP dépendra probablement aussi de la diffusion du trusted publishing. Cette fonctionnalité implémente un standard défini par l’OpenSSF. Elle utilise l’authentification OIDC pour créer une relation de confiance entre npm et des fournisseurs CI/CD. PyPi fut le premier gestionnaire de paquets à l’adopter, en 2023. Sur npm, elle est disponible depuis juillet 2025, mais ne gère encore que trois services :

GitHub Actions (exécuteurs managés)

GitLab CI/CD (exécuteurs partagés)

CircleCI (version cloud)

L’édition par lots des configurations trusted publishing est relativement récente (février 2026). La détection des malwares dans les dépendances avec Dependabot l’est encore plus (mars)… en tout cas dans sa nouvelle incarnation. GitHub avait suspendu la précédente en 2022, en raison du volume de faux positifs dus officiellement à des conflits de nommage entre des paquets publics et privés.

Illustration générée par IA

The post La sécurité de npm, un jeu d’équilibriste pour GitHub appeared first on Silicon.fr.

AI Insight
Core Point

GitHub tightens npm security with ephemeral tokens, mandatory 2FA, and disabled install scripts, but delays TOTP removal amid developer friction, balancing supply-chain defense against workflow disruption.

Key Players

GitHub — code hosting platform and npm maintainer, US-based.

Industry Impact
  • ICT: High — directly impacts JavaScript development workflows and open-source supply-chain security.
  • Computing/AI: High — npm dependencies are foundational in many AI/ML toolchains and build systems.
Tracking

Strongly track — phased security mandates and possible TOTP deprecation will reshape developer practices and expose npm’s supply-chain surface.

Related Companies

No companies linked yet

Categories
软件 网络安全
AI Processing
2026-06-12 19:59
deepseek / deepseek-v4-pro