npm 12 がスクリプトの実行方法を変更します
19年もの間、npm install はコードを自動的に実行してきました。preinstall や postinstall といったライフサイクルフックを使用していました。パッケージをダウンロードすると、コードを確認する前にスクリプトが実行されてしまう仕組みでした。
この信頼モデルは、npm 12 をもって終了します。
2026年7月より、GitHub はオプトアウトからオプトインへと移行します。この変更により、攻撃者からサプライチェーンを保護します。
npm 12 で変更される内容は以下の通りです:
preinstallやpostinstallといった依存関係のスクリプトは、自動的には実行されなくなります。これらを許可するには、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