DevOPS
悪名高いShai-Huludワームがまさにこの機能を悪用していました。マルウェア作者以外の全員が「遅すぎるよりはまし」と言っています
GitHubはnpmのデフォルト設定を変更し、インストールコマンド実行時にスクリプトが自動的に起動しないようにします。この変更により、悪名高いShai-Huludワームをはじめとする悪意あるパッケージに広く悪用されてきた機能が無効化されます。
メンテナーのLeo Balter氏は次のように述べています。「インストール時のライフサイクルスクリプトは、npmエコシステムにおける最大のコード実行リスクです。npm installを実行するたびに、すべての推移的依存関係のスクリプトが走るため、依存ツリーのどこか一箇所でも侵害されたパッケージがあれば、開発者のマシンやCI(継続的インテグレーション)環境で任意のコードが実行されてしまいます」
7月リリース予定のnpm 12では、セキュリティに関するデフォルト設定が3点変更されます。preinstall、install、postinstallに設定されたスクリプトは、allow-scriptsで明示的に許可しない限り実行されなくなります。リモートURLから依存関係を取得する–allow-gitフラグはデフォルトで無効になり、悪意ある.npmrcファイルがGit実行ファイルを上書きして任意のコードを実行できる攻撃経路が塞がれます。さらにallow-remoteのデフォルト値がnoneになり、リモートURLからの依存関係ダウンロードが完全にブロックされます。
スクリプトの実行は引き続き可能で、package.jsonの設定ファイルにallowlistを記述することで許可できます。この設定はデフォルトでインストール済みパッケージのバージョンに固定されます。
これらは破壊的変更にあたるため、Balter氏はプロジェクト内でスクリプトが必要な全インストール済みパッケージについて、スクリプトを許可するコマンドを実行しておくよう開発者に推奨しています。「これにより、予期しない新しいスクリプトに対して即座に保護されます」と同氏は説明します。次のステップとして、それらのパッケージを見直し、スクリプトが不要なものは拒否設定にすることが求められます。
一部のパッケージはスクリプトの承認がなければ正常に動作しません。インストール時にコンパイルするネイティブモジュール、postinstallでバイナリを取得するPlaywrightやPuppeteerといったテストツール、そしてクロスプラットフォームデスクトップアプリケーション向けにChromiumブラウザエンジンをラップするElectronなどが該当します。
これらの機能は2月にリリースされたnpmバージョン11.10.0からすでに利用可能でしたが、デフォルトではなくオプトインのフラグとして提供されていました。同バージョンではmin-release-ageも導入されており、指定した日数より新しいバージョンのパッケージのインストールをブロックすることで、新たに公開された悪意あるパッケージへの対策として機能します。
現行バージョンのnpm 11.16を使用している開発者にとってのベストプラクティスは、.npmrcまたは環境変数でこれらのフラグを有効にしておくことです。これはバージョン12への移行準備にもなります。一点注意が必要なのは、既存のignore-scriptsフラグが追加ツールなしではallowlistをサポートしていないことです。ignore-scriptsの設定はallow-scriptsを上書きするため、承認済みスクリプトを実行させるにはtrueに設定されている場合はこれを削除する必要があります。allowScripts設定はnpm 11にも存在しますが、現状は参考値にすぎません。
これでnpmのセキュリティ問題がすべて解決するかというと、残念ながらそうではありません。「結局マルウェアはインストールスクリプトからモジュール本体に移行するだけで、どのみち実行されてしまう」とある開発者はコメントしています。また、最小リリース期間を含むnpmより安全なデフォルト設定を備えるpnpmへの移行を勧める意見も多く見られます。
ただし、今回の変更がnpmのセキュリティを向上させる長年待ち望まれた改善であるという点では、おおむね意見が一致しています。この変更に関するプルリクエストには「依存関係のインストールスクリプトをデフォルトで実行する主要パッケージマネージャーはnpmだけになっていた。pnpm v10以降、Yarn Berry、Bun、Denoはいずれもデフォルトでブロックしている」との一文が記されています。®
翻訳元: https://www.theregister.com/devops/2026/06/10/github-pulls-pin-on-npms-auto-run-scripts/5253453