NPMエコシステムを狙ったサプライチェーン攻撃の急増を受け、GitHubは依存パッケージのスクリプトをデフォルトで実行しない方針を発表しました。
過去数カ月の間に相次いだ複数の重大インシデントは、主にTeamPCPおよび自己複製型ワームShai-Huludと関連しており、npm install実行時に依存パッケージのスクリプトがデフォルトで自動実行される仕組みを悪用して、数千人の開発者にマルウェアを感染させていました。
GitHubは、ユーザー保護の強化を目的として、7月にリリース予定のNPMバージョン12からスクリプトの実行をデフォルトでブロックすると発表しました。
「npm installは、プロジェクト内で明示的に許可されていない限り、依存パッケージのpreinstall、install、postinstallスクリプトを実行しなくなります」と、このコード共有プラットフォームは説明しています。
この変更は、binding.gypを持ち明示的なインストールスクリプトを持たないパッケージなど、ネイティブのnode-gypビルドにも影響します。また、git、file、linkの各依存関係におけるprepareスクリプトも対象となります。最近発生したShai-Hulud Miasma攻撃では、武器化されたbinding.gypファイルが悪用されていました。
今回の変更が自身のプロジェクトに与える影響を確認するには、開発者はnpm approve-scripts –allow-scripts-pendingを実行し、信頼するパッケージを許可してそれ以外をブロックすることで、package.jsonに書き込まれる許可リストを作成できます。
このJSONをコミットすれば、NPMバージョン11.16.0以降を使用している開発者は、インストール時にスクリプトが実行される場合に警告を受け取るようになります。
さらにGitHubによると、(直接・推移的を問わず)Git依存関係は、明示的に許可されていない限り、npm installでは解決されなくなります。
「これにより、–ignore-scriptsを指定していても、Git依存関係の.npmrcがGit実行ファイルを上書きできるコード実行経路が閉じられます」と同プラットフォームは説明しています。
同様に、リモートURLからの依存関係もNPMバージョン12では解決されなくなります。HTTPSタービール(直接・推移的を問わず)が対象ですが、バージョン11.15.0から利用可能な–allow-remoteフラグで許可することができます。
「NPM 11.16.0以降にアップグレードし、通常のインストールを実行して警告を確認してください。npm approve-scripts –allow-scripts-pendingを使ってスクリプトを持つパッケージを確認し、信頼できるものを承認してからpackage.jsonの更新をコミットしてください。その後は、アップグレード後も承認済みのスクリプトのみが実行されます」とGitHubは述べています。