npm v12、'npm install'攻撃に対するサプライチェーンを強化
GitHubは来月リリースされるnpm v12で、増大するサプライチェーン攻撃の脅威に直接対処する大幅なセキュリティ強化を展開します。このアップデートは、'npm install'コマンドの動作を根本的に変更し、以前はデフォルトで信頼されていたコード実行およびレジストリ以外の依存関係ソースに対する明示的な承認を要求します。この動きは、悪意のある攻撃者によって一般的に悪用される攻撃ベクトルを劇的に削減することを目指しています。

**GitHub**は、来月リリース予定の**npm v12**の大規模なセキュリティオーバーホールを発表しました。これらの変更は、遍在する`'npm install'`コマンドによってトリガーされる動作を活用するサプライチェーン攻撃に対抗するために特別に設計されています。
`'npm install'`は、プロジェクトの依存関係をダウンロードおよびインストールし、関連するインストールスクリプトを実行するコマンドです。開発者は、プロジェクトのクローン、アップデートのプル、またはCI/CDビルドプロセス中に頻繁に使用します。攻撃者は、パッケージインストール中の自動コード実行の可能性から、このコマンドを長らく標的としてきました。
このアップデートの背後にある中心的な原則は、`npm install`操作中のコード実行およびレジストリ以外の依存関係ソースに対する暗黙の信頼から明示的な承認への移行です。
**GitHub**は、発表で以下の主要な変更点を詳述しました。
1. **スクリプト実行の制限**: **npm v12**以降、依存関係からの`preinstall`、`install`、`postinstall`スクリプトは、明示的に承認されない限り自動的に実行されなくなります。この制限は、**node-gyp**を介して開始されるネイティブモジュールビルドおよびGit、ローカルファイル、リンクされた依存関係からの`prepare`スクリプトにも及びます。
2. **Git依存関係の解決**: `npm install`は、明示的な許可なしに、直接的または推移的なGitリポジトリからの依存関係の取得を自動的に停止します。**GitHub**は、これにより、インストールスクリプトが無効になっていても、Git依存関係の`.npmrc`ファイルが変更されたGit実行可能ファイルを操作するために変更される可能性のある、重要なコード実行パスが閉じられると指摘しています。
3. **リモートURL依存関係の解決**: HTTPS tarballなどのリモートURLからインストールされる依存関係は、直接的および推移的な依存関係の両方に対して、自動的に解決されなくなります。
これらの変更により、依存関係のインストールスクリプトの自動実行、Gitベースの依存関係の自動解決、リモートURL依存関係の自動解決が排除されることで、サプライチェーンリスクが大幅に軽減されると予想されます。
このような新しいデフォルトは、**eslint-config-prettier**、**Toptal's Picasso packages**、および多数のデータ窃盗**npm**パッケージを標的とした悪意のある`preinstall`/`postinstall`スクリプトキャンペーンを含む、いくつかの最近のサプライチェーン攻撃を防ぐことができたでしょう。また、**Shai-Hulud**攻撃で文書化されたGit依存関係の悪用にも対抗できたでしょう。
これらの動作のいずれかに正当に依存しているプロジェクトは、**npm v12**にアップグレードする前に明示的にオプトインする必要があります。
**GitHub**は、開発者に**npm 11.16.0**以降にアップグレードして準備することを推奨しています。このバージョンは、**v12**で影響を受けるすべての操作に対して警告を表示し、開発者が完全なアップグレードを行う前に、明示的な承認を必要とする依存関係またはワークフローを特定して対処できるようにします。
**npm v12**にアップグレードすると、明示的に承認されたスクリプトと依存関係ソースのみが自動的に機能します。
開発者がこれらの今後の変更に関するフィードバックや提案を提供するための[コミュニティディスカッション](https://github.com/orgs/community/discussions/198547)が開始されています。