npm 12 がスクリプトの実行方法を変更します

19年もの間、npm install はコードを自動的に実行してきました。preinstallpostinstall といったライフサイクルフックを使用していました。パッケージをダウンロードすると、コードを確認する前にスクリプトが実行されてしまう仕組みでした。

この信頼モデルは、npm 12 をもって終了します。

2026年7月より、GitHub はオプトアウトからオプトインへと移行します。この変更により、攻撃者からサプライチェーンを保護します。

npm 12 で変更される内容は以下の通りです:

  • preinstallpostinstall といった依存関係のスクリプトは、自動的には実行されなくなります。これらを許可するには、npm approve-scripts を使用する必要があります。
  • node-gyp を介したネイティブモジュールのビルドは、デフォルトでブロックされます。明示的に許可する必要があります。
  • Git やリモート URL の依存関係は、自動的には解決されなくなります。--allow-git または --allow-remote フラグが必要になります。
  • 新しい min-release-age 設定により、新しいパッケージのバージョンをブロックできるようになります。タイマーを設定することで、パッケージが検証に十分な期間経過していることを確認できます。

攻撃者は現在のシステムを悪用しています。最近、axios の悪意のあるバージョンが、インストールから1秒後に実行されるツールを同梱していました。それは3時間の間、稼働し続けました。これは、数百万人ものユーザーを侵害するのに十分な時間です。

今から準備が可能です。npm 11.16.0 以上を使用している場合は、次のコマンドを実行してください:

npm approve-scripts --allow-scripts-pending

これにより、どの依存関係がスクリプトを実行するかを確認できます。信頼できるものを承認し、package.json に保存できます。この破壊的変更が導入される前に、これを行っておきましょう。

出典: https://dev.to/ranjansingh41/npm-12-will-change-script-execution-behavior-to-prevent-attacks-45lg

オプションの学習コミュニティ: https://t.me/GyaanSetuAi