npm v12 が GA:npm install は依存コードを実行する前に許可を求める
npm v12 が latest になった。allowScripts はデフォルトで無効、--allow-git と --allow-remote は none になる。lifecycle script と暗黙の node-gyp build は明示的な承認が必要だ。
何が変わるか
npm v12 が latest になった。allowScripts はデフォルトで無効、--allow-git と --allow-remote は none になる。lifecycle script と暗黙の node-gyp build は明示的な承認が必要だ。
明示的な policy
npm approve-scripts --allow-scripts-pending で実行候補を洗い出し、根拠を確認した package だけを承認する。allowScripts policy は package.json に commit し、通常の version bump より厳しく review する。
CI への影響
native addon、Git dependency、remote tarball、workspace、cache なしの cold install を優先して検証する。既存 binary cache は不足した承認を隠す可能性がある。
安全な公開
公開処理は長期 token から OIDC trusted publishing へ移す。重要な package では npm stage publish と人による 2FA 承認を追加できる。
npm v12 チェックリスト
✓未承認 script を棚卸しする。
✓承認を version に pin する。
✓CI で cold install を試す。
✓公開を OIDC または staging に移す。
Sources
- GitHub Changelog: npm install-time security and GAT bypass2fa deprecation
- GitHub Changelog: Upcoming breaking changes for npm v12
- npm Docs: npm approve-scripts
- npm Docs: npm deny-scripts
- npm Docs: Staged publishing for npm packages
- npm Docs: Trusted publishing for npm packages
- Reddit r/javascript: Upcoming breaking changes for npm v12