GitHubがnpm v12でスクリプトの自動インストールを無効化、攻撃対策を強化

GitHubは、npm v12のリリースに向けてセキュリティを重視したnpmの刷新を発表しました。ソフトウェアサプライチェーン攻撃の緩和と、パッケージインストール時の不正なコード実行を防止するため、より厳格なデフォルト制御が導入されます。

これらの変更は現在、npmバージョン11.16.0以降でオプトイン形式の警告として利用可能であり、2026年7月のnpm v12リリース時にデフォルトの動作となる予定です。

今回の更新の核心は、インストール時スクリプトの扱い方における根本的な変更です。インストール時スクリプトは、脅威アクターが悪意のあるコードを実行するために長年にわたって悪用してきた攻撃経路となっています。

npm v12では、allowScriptsの設定がデフォルトで無効になります。これにより、preinstallinstallpostinstallといったライフサイクルスクリプトは、開発者が明示的に承認しない限り、依存関係に対して自動的に実行されなくなります。

この変更は、node-gypによるネイティブモジュールのビルドを含む暗黙的なスクリプト実行にも影響し、許可されない限りブロックされるようになります。

さらに、同じポリシーのもと、Git、ローカルファイル、およびリンクされた依存関係からのprepareスクリプトの実行も制限されます。

開発者はnpm approve-scripts --allow-scripts-pendingコマンドを使用して影響を受けるパッケージを確認でき、スクリプトの実行を試みる依存関係を特定できます。

信頼できるパッケージはnpm approve-scriptsを使って明示的に許可リストへ追加でき、信頼できないパッケージはnpm deny-scriptsでブロックできます。

設定されたポリシーはpackage.jsonファイル内に保存されるため、開発環境全体でバージョン管理された形でポリシーを適用できます。

もう一つの重要な変更は、Gitベースの依存関係に関するものです。--allow-gitフラグはデフォルトでnoneになり、明示的に有効化しない限りnpmはGit依存関係を解決できなくなります。

この措置は、Gitリポジトリ内の悪意ある.npmrc設定によってGitの実行パスが上書きされ、--ignore-scriptsでスクリプト実行を無効にしていても任意のコマンドが実行できてしまうという既知のリスクに対処するものです。

同様に、npm v12では--allow-remoteフラグを通じてリモート依存関係ソースへのデフォルト制限が導入され、こちらもデフォルトはnoneになります。

これにより、明示的に承認されない限りリモートのtarball URLからのインストールが防止され、公式レジストリ外から提供される未検証または改ざんされたパッケージへの露出がさらに低減されます。詳細はGitHubの公式発表で確認できます。

なお、--allow-file--allow-directoryといった関連フラグは現在の動作を維持し、ローカルワークフローの安定性を保ちながら、リスクの高いリモートおよびGitベースのパスのみを厳格化します。

これらの破壊的変更に備えるため、GitHubはnpm 11.16.0以降へのアップグレードと、標準的なインストールワークフローの実行による警告の確認を推奨しています。

開発者は警告が表示されたパッケージを確認し、信頼できるスクリプトを承認して更新された設定をコミットすることで、スムーズな移行を実現できます。npm v12が採用されると、明示的に承認されたスクリプトのみが実行されるようになり、依存関係の動作に対する暗黙の信頼は実質的に排除されます。

今回の変更は、JavaScriptエコシステム全体のサプライチェーンセキュリティ強化に向けたGitHubの幅広い取り組みを反映しています。

暗黙的な実行から明示的な信頼へと移行することで、npm v12は依存関係ベースの攻撃リスクを大幅に低減することを目指しています。こうした攻撃は、悪意あるパッケージや侵害されたメンテナー、難読化されたインストールスクリプトを通じて開発者を標的にするケースが増加しています。

翻訳元: https://cyberpress.org/github-automatically-npm-script/

ソース: cyberpress.org