GitHubは、npm v12のリリースに向けて、セキュリティを重視した大規模なnpmの刷新を発表しました。ソフトウェアサプライチェーン攻撃の緩和とパッケージインストール時の不正コード実行を防止するため、より厳格なデフォルト制御が導入されます。
これらの変更は、npmバージョン11.16.0以降でオプトインの警告機能として利用可能となっており、2026年7月にnpm v12が正式リリースされた際にデフォルトの動作となる予定です。
悪意あるnpmを防ぐ自動制御機能
今回のアップデートの核心は、npmのインストール時スクリプトの扱い方における根本的な方針転換にあります。インストール時スクリプトは、脅威アクターが悪意あるコードを実行するために長年にわたって悪用されてきた攻撃ベクターです。
npm v12では、allowScriptsの設定がデフォルトでオフになります。つまり、preinstall、install、postinstallといったライフサイクルスクリプトは、開発者が明示的に承認しない限り、依存関係として自動実行されなくなります。
この変更は、node-gypによるネイティブモジュールのビルドなど、暗黙的なスクリプト実行にも影響します。これらも許可しない限りブロックされるようになります。
また、npmは同ポリシーのもと、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からのインストールが禁止され、公式レジストリ外から配布される未検証または改ざんされたパッケージへの露出リスクがさらに低減されます。なお、--allow-fileや--allow-directoryといった関連フラグは現在の動作が維持されます。
npm v12の主なセキュリティ変更点
これらの破壊的変更に備えるため、GitHubはnpm 11.16.0以降へのアップグレードと標準的なインストールワークフローの実行による警告の確認を推奨しています。
開発者はフラグが立てられたパッケージを確認し、信頼できるスクリプトを承認したうえで更新した設定をコミットすることで、スムーズな移行が可能になります。npm v12を採用すると、明示的に承認されたスクリプトのみが実行されるようになり、依存関係の動作に対する暗黙的な信頼が事実上排除されます。
これらの変更は、JavaScriptエコシステムにおけるサプライチェーンセキュリティ強化に向けたGitHubの広範な取り組みを反映しています。暗黙的な実行から明示的な信頼へと方針を転換することで、npm v12は依存関係ベースの攻撃リスクを大幅に低減することを目指しています。こうした攻撃は近年、悪意あるパッケージ、侵害されたメンテナー、難読化されたインストールスクリプトを通じて開発者を標的にするケースが増加しています。
翻訳元: https://gbhackers.com/github-introduces-automatic-controls-to-prevent-malicious-npm/