テック技報最新号へ →
セキュリティ

依存パッケージの「クールダウン」設定(minimumReleaseAge / min-release-age)

公開直後のバージョンを一定時間インストールしない設定を入れ、乗っ取られたパッケージの「公開〜検知・削除」の窓を避ける。

@zaru · 2026-10-09
#supply-chain#npm#pnpm#bun#dependency

何を解決するか / いつ使うか

  • Shai-Hulud 系や TanStack 侵害のように、悪性バージョンは公開後数分〜数時間で検知・非推奨化されることが多い。
  • インストールを 1 日〜1 週間遅らせるだけで、その窓に巻き込まれるリスクを大きく下げられる。
  • 「検知はされるが、パッチが出るまでにDLした人が犠牲になる」構図(@nkowne63)への直接の対策。

設定例

パッケージマネージャごとに単位が違うので注意。

yaml
# pnpm-workspace.yaml(pnpm 10.16+、単位は「分」。pnpm 11 からデフォルト 1440 = 1日)
minimumReleaseAge: 1440        # 1週間なら 10080
ini
# .npmrc(npm CLI 11.10+、単位は「日」)
min-release-age=1
toml
# bunfig.toml(Bun 1.3+、単位は「秒」)
[install]
minimumReleaseAge = 86400

Yarn Berry 4.10+ は npmMinimalAgeGate(分)。

緊急のセキュリティパッチだけ今すぐ入れたいとき

環境変数で一時的に無効化できる(@zaru の紹介)。

sh
# pnpm
npm_config_minimum_release_age=0 pnpm update <pkg>
# npm
npm_config_min_release_age=0 npm install <pkg>

pnpm 11 では pnpm audit --fix が修正版を minimumReleaseAgeExclude に追加してくれるので、恒常的な例外はそちらで管理するのが安全。

注意点

  • 「インストール時に解決されるバージョン」にだけ効く。lockfile に既に悪性版が入っていれば防げない。
  • 時間が経っても検知されない巧妙なマルウェアには無力。install script 制御(別記事)やレジストリ側のブロックと併用する。
  • 新しいパッケージマネージャ aube(mise 作者製)はデフォルトで minimumReleaseAge=1440(@shisama_ の紹介)。

出典

X の元の投稿を開く