NPM

GitHubは、来月リリース予定のnpm v12において、「npm install」コマンドによって引き起こされる動作を悪用したサプライチェーン攻撃を阻止することを目的とした、セキュリティに重点を置いたいくつかの変更が導入されると発表しました。

「npm install」は、プロジェクトの依存関係をダウンロードしてインストールし、パッケージによって定義されたインストール関連のスクリプトを実行するために使用されるコマンドです。

開発者はプロジェクトのクローン作成後や更新の取得後、あるいはCI/CDビルド中にこのコマンドを実行しますが、パッケージのインストール中にコードが自動的に実行される可能性があるため、攻撃者はこれを標的としています。

image

今回の発表の主なポイントは、現在「npm install」中に自動的にトリガーされるコード実行やレジストリ外の依存関係ソースについて、デフォルトで信頼されるのではなく、明示的な承認が必要になるという点です。

具体的には、GitHubは以下の変更を発表しました

  1. バージョン 12 以降、npm install は、明示的に承認されていない限り、依存関係からの preinstall、install、または postinstall スクリプトを実行しなくなります。これは、node-gyp を通じてトリガーされるネイティブモジュールのビルド、および Git、ローカルファイル、リンクされた依存関係からの prepare スクリプトにも適用されます。
  2. npm installは、明示的に許可されない限り、直接的または推移的なGitリポジトリからの依存関係の取得を行わなくなります。GitHubによると、これにより、インストールスクリプトが無効化されている場合でも、Git依存関係の.npmrcファイルによって使用されるGit実行ファイルが変更される可能性のあるコード実行経路が排除されるとしています。
  3. HTTPS タールボールなどのリモート URL からインストールされる依存関係は、明示的に許可されない限り、解決されなくなります。これは、直接的な依存関係と推移的な依存関係の両方に適用されます。

これらの変更により、依存関係のインストールスクリプトの自動実行、Git ベースの依存関係の自動解決、およびリモート URL 依存関係の自動解決が排除され、サプライチェーン攻撃を大幅に削減できます。

この新しいデフォルト設定により、最近のサプライチェーン攻撃で使用されていたいくつかの攻撃手法が阻止された可能性があります。

これには、eslint-config-prettierToptalのPicassoパッケージ、数十のデータ窃取型npmパッケージを 標的とした悪意のあるpreinstall/postinstallスクリプトキャンペーン、およびShai-Hulud攻撃で報告されたGit依存関係の悪用が含まれます。

正当なワークフローのためにこれらの動作のいずれかに依存しているプロジェクトは、npm v12 にアップグレードする前に、明示的に有効にする必要があります。

GitHubは、開発者がnpm 11.16.0以降にアップグレードして準備することを推奨しています。これにより、バージョン12で動作しなくなるすべてのアクションに対して警告が表示されます。

これにより、開発者は通常のインストール手順を実行しながらこれらの警告を確認し、アップグレード前に明示的な承認を必要とする依存関係やワークフローを特定することができます。

バージョン 12 へのアップグレード後、明示的に承認されたスクリプトと依存関係ソースのみが自動的に機能し続けます。

今後の変更について開発者が提案を共有できるよう、コミュニティディスカッションが開設されました