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

依存パッケージの install script を既定で止める(pnpm allowBuilds ほか)

preinstall / postinstall を既定で実行しないパッケージマネージャ設定にし、必要なものだけ許可リストで動かす。

@pizzacat83b · 2026-10-09
#supply-chain#npm#pnpm#postinstall

何を解決するか

  • Mini Shai-Hulud(Bun の preinstall フック)や、postinstall で ~/.claude/commands/ にスキル用 Markdown をコピーして Claude Code に毎セッション読み込ませる手口(@labelmake の紹介)など、侵害の多くは install script を入口にする。
  • bun / pnpm / deno は依存の postinstall を既定でスキップする(@pizzacat83b)。

手順(pnpm)

yaml
# pnpm-workspace.yaml(allowBuilds は pnpm 10.26+。pnpm 11 で onlyBuiltDependencies 等を置き換え)
allowBuilds:
  esbuild: true      # ビルドが本当に必要なものだけ true
  core-js: false     # 明示的に拒否
strictDepBuilds: true  # 未レビューの build script があれば install を失敗させ CI ゲートにする
  • pnpm approve-builds で対話的に承認すると allowBuilds に書き込まれる。
  • dangerouslyAllowAllBuilds は名前どおり危険なので使わない。

手順(npm)

ini
# .npmrc
ignore-scripts=true

必要なパッケージだけ npm rebuild <pkg> で個別にビルドする。npm v12 では install script が opt-in になる予定。

注意点

  • import しただけで悪性コードが走るパターン(PyPI の telnyx 侵害など)には効かない。クールダウンやレジストリ側ブロックと併用(@pizzacat83b も併用を推奨)。
  • 許可済みパッケージ自体が乗っ取られた場合は防げない。許可リストは最小限に。

出典

X の元の投稿を開く