依存パッケージの install script を既定で止める(pnpm allowBuilds ほか)
preinstall / 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 も併用を推奨)。
- 許可済みパッケージ自体が乗っ取られた場合は防げない。許可リストは最小限に。
出典
- @pizzacat83b · 2026-03-31
- @ryoppippi · 2026-01-28 (pnpm の allowBuilds を全プロジェクトに設定)
- @labelmake · 2026-04-03
- 参考: pnpm ドキュメント Build Settings