GitHub、npmのデフォルトスクリプト実行をブロックしサプライチェーン攻撃を強化
ソフトウェアサプライチェーンのセキュリティ強化に向けた重要な動きとして、**GitHub**は来月リリース予定の**npm**バージョン12で「破壊的変更」を導入します。このアップデートでは、デフォルトでインストールスクリプトの自動実行が無効化され、悪意のあるパッケージによって悪用される重要な攻撃ベクトルに直接対処します。
ソフトウェアサプライチェーンのセキュリティは、ITセキュリティ専門家にとって最重要課題となっており、**npm**のパッケージマネージャーは頻繁に標的となっています。**npm**の管理元である**GitHub**は、今後の**npm**バージョン12で「破壊的変更」を導入することにより、これらのリスクを軽減するための断固たる措置を講じています。

### デフォルトでのインストールスクリプトの無効化
アップデートの核心は、デフォルトでインストールスクリプトをオフにすることです。この変更は、**npm**ライフサイクルフックを介して悪意のあるコード実行をトリガーするために`npm install`コマンドを利用する攻撃手法に直接対抗します。**GitHub**は、インストール時のライフサイクルスクリプトを「**npm**エコシステムにおける単一最大のコード実行サーフェス」と特定しています。
現在、`npm install`はすべての推移的依存関係からのスクリプトを実行します。これは、依存関係ツリー内のどこかにある単一の侵害されたパッケージが悪意のあるコードを開発者のマシンまたはCIランナーで実行できることを意味します。これらの動作をブロックすることにより、**npm**はインストール中にコード実行が自動的に開始される前に、明示的なユーザーの承認を要求するようになります。
### npm v12の主な変更点
今後の変更は包括的であり、いくつかの一般的な攻撃ベクトルを対象としています。
* `npm install`は、プロジェクトで明示的に許可されていない限り、依存関係からの`preinstall`、`install`、または`postinstall`スクリプトを実行しなくなります。
* `npm install`は、`--allow-git`を介して明示的に許可されていない限り、直接または推移的なGit依存関係を解決しなくなります。
* `npm install`は、`--allow-remote`を介して明示的に許可されていない限り、リモートURL(例:`https`tarballs)からの依存関係を解決しなくなります。
これはネイティブの`node-gyp`ビルドにも拡張され、明示的なインストールスクリプトを持たない`binding.gyp`を持つパッケージは、**npm**が暗黙的に`node-gyp rebuild`を実行するため、引き続きブロックされます。同様に、Git、ファイル、およびリンク依存関係からの`prepare`スクリプトはブロックされます。
### Git依存関係の悪用対策
`--allow-git`をデフォルトで`none`に設定することにより、**GitHub**は、Git依存関係の`.npmrc`設定ファイルがGit実行可能ファイルを上書きできるという、重要なコード実行パスを閉じます。この脆弱性は、パッケージがインストール中に組み込みのライフサイクルスクリプトを自動的に実行するのを防ぐように設計されている`--ignore-scripts`フラグを使用している場合でも存在しました。
### 開発者の準備とベストプラクティス
**GitHub**は、開発者が**npm** 11.16.0以降にアップグレードしてこれらの変更に備えることを推奨しています。アップグレード後、開発者は通常のインストールを実行し、表示される警告を確認する必要があります。推奨されるワークフローは、`npm approve-scripts --allow-scripts-pending`を使用してスクリプトを持つパッケージを特定し、信頼できるものを承認してから、更新された`package.json`をコミットすることです。
明示的に承認されたスクリプトのみがアップグレード後も引き続き実行され、承認されていないスクリプトはブロックされます。暗黙的な信頼から明示的な承認へのこの移行は、**npm**エコシステムのセキュリティ体制を大幅に強化します。
今年初め、**npm**は`min-release-age`も導入しました。これは、指定された日数より前に発行されたパッケージバージョンを拒否するように設計された設定です。これは、新しく発行された悪意のあるパッケージに対する追加の保護措置として機能し、ソフトウェアサプライチェーンをさらに強化します。