ep.191『ユーザーの努力に委ねないために — Private NPM で実装する min-release-age』

  • HANATANI Takuma(@potato4d)
  • rChaser53
2026/07/13 に公開71 views

このエピソードについて

@potato4d が、社内プライベート npm の開発・運用を担当する @rChaser53 と一緒に、相次ぐ npm サプライチェーン攻撃への対策として話題の min-release-age について語りました。

ゲスト

  • 吉澤さん (@rChaser53)
    • プロダクト開発CBU プロダクト開発ユニット GOEディビジョン / SRE
    • 元 UIT 所属。社内プライベート npm の開発・運用を現在も担当

社内プライベート npm の min-release-age 対応

レジストリ側でデフォルト提供

  • パブリッシュから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 などのフックを止めるだけで直近のサプライチェーン攻撃は大半防げる

関連リンク


採用について

使用素材・クレジット

© Presented by UIT