@potato4d が、社内プライベート npm の開発・運用を担当する @rChaser53 と一緒に、相次ぐ npm サプライチェーン攻撃への対策として話題の min-release-age について語りました。
ゲスト
- 吉澤さん (@rChaser53)
- プロダクト開発CBU プロダクト開発ユニット GOEディビジョン / SRE
- 元 UIT 所属。社内プライベート npm の開発・運用を現在も担当
レジストリ側でデフォルト提供
- パブリッシュから1日経過しないバージョンはインストールできない仕組みを、レジストリ側でデフォルト提供(.npmrc などの設定不要で強制的に働く)
- 社内パッケージなど開発元が明確なものは除外して、開発の利便性を確保
- Verdaccio 本体ではなく、前段に置いたリバースプロキシで認証認可と合わせて実装
- レジストリの time メタデータを全件検索して24時間以内のバージョンを除外。next などのタグがあると「1つ前のバージョン」の判定が難しいため全件検索方式に
仕組み化に至った経緯
- 以前は依頼ベースの手動対応だったが、攻撃の急増(最近は1〜2週間に一度は調査依頼)で追いつかなくなった
- npm install が走った時点で手遅れになる攻撃も増え、機械的な防御が必須に
min-release-age は何日にすべきか
- 当初は pnpm ドキュメントの「大半の問題は1時間以内に解決される」を根拠に1日で運用開始
- しかし直近の Axios 1.14.1 の件では、公式レジストリの配信停止まで3〜4時間かかっており「1時間」は実態と合わなくなっている
- 配信停止後もレジストリ側のキャッシュでインストールできてしまう問題も実際に発生
- 社内の複数レジストリ(全体で4つほど)の管理メンバーで協議し、全社的に3日へ
pnpm という選択肢と自衛策
- 0-day 対応などで即座にバージョンアップしたい場合、min-release-age 自体が障害になるジレンマがある
- pnpm の minimumReleaseAgeExclude なら特定パッケージだけ除外でき、現状のセキュリティ運用としては強い
- pnpm v11 や新興の aube では minimumReleaseAge 相当がデフォルト1日で有効。npm 公式にも除外機能の issue が上がっている(2026年5月時点では未リリース)
- 個人でできる対策としては ignore-scripts が特に有効。postinstall などのフックを止めるだけで直近のサプライチェーン攻撃は大半防げる
関連リンク
- pnpm minimumReleaseAge: https://pnpm.io/settings#minimumreleaseage
- pnpm minimumReleaseAgeExclude: https://pnpm.io/settings#minimumreleaseageexclude
- aube: https://aube.jdx.dev/
- Verdaccio: https://verdaccio.org/
- ep.149『より信頼できる社内基盤へ Verdaccio 製 Private NPM をスケールアウトさせるためのプラグイン開発』: https://uit-inside.linecorp.com/episode/149



Comments
Nothing yet. Say the first thing.
Sign in to join the conversation.