GitHubはnpmエコシステムに対して、サプライチェーンセキュリティに関する2つの重要なアップグレードを展開しました。一般提供が開始された段階的公開(ステージドパブリッシング)と、インストール時のソース制限フラグの新機能です。いずれも2026年5月22日にリリースされたnpm CLI 11.15.0に含まれています。
段階的公開は、npmレジストリへのパッケージバージョンの公開方法を根本的に再構築するものです。
新バージョンをすべてのユーザーに即時公開する直接パブリッシュの代わりに、ビルド済みのtarballはステージングキューに送られ、パッケージが公開インストール可能になる前に、人間のメンテナーが2FA認証を完了する必要があります。
ステージングキューはnpmjs.comとnpm CLIの両方から確認でき、バージョンが公開される前にメンテナーが完全な透明性を持って確認できます。
GitHubはこれを、OpenID Connect(OIDC)を使用した非インタラクティブなCI/CDパイプラインや信頼済み公開ワークフローを含む、すべての公開操作に「存在証明」を強制するものと説明しています。
これにより、自動公開が人間によるレビューなしに悪意あるコードを下流に流す可能性のあるギャップが事実上解消されます。段階的公開を使用する前に、メンテナーは以下の要件を満たす必要があります。
GitHubは、段階的公開と信頼済み公開(OIDC)を組み合わせることを推奨しています。この場合、CI/CDの設定はnpm stage publishのみに制限され、npm publishの呼び出しは直接拒否されます。
CIワークフローは引き続き非インタラクティブに実行され、メンテナーはパイプライン処理後に信頼済みデバイスから承認を行います。
npm 11.10.0で導入された--allow-gitフラグに続き、npm 11.15.0ではレジストリ以外のすべてのインストールソースに明示的許可リストモデルを拡張する3つの新しいフラグが追加されました。
各フラグはall(現在のデフォルト)またはnoneを受け付け、.npmrcまたはpackage.jsonで設定できます。セキュリティチームは、これらのフラグのいずれかをnoneに設定することで、すぐに厳格な動作を選択できます。
特筆すべきは、--allow-gitのデフォルトが次期npm CLI v12においてallからnoneに変更される予定であり、依存関係のソースに対するデフォルト拒否へという業界全体の広範なシフトを示しています。
これらのアップデートは、JavaScriptエコシステム全体でサプライチェーン攻撃が加速するという背景のもとで登場しました。
2025年には、多段階のShai-Hulud攻撃キャンペーンが、フィッシングによって侵害されたnpmメンテナーの認証情報を悪用し、広く使用されているパッケージに自己複製型ワームを注入し、クラウドトークンを窃取し、TruffleHogでリポジトリをスキャンして、大規模な秘密情報の流出を引き起こしました。
さらに最近では、TeamPCPという脅威グループが特定され、自己継続的な侵害サイクルを通じて前例のない規模で人気パッケージを汚染していたことが明らかになりました。
Socket研究チームも報告しているように、2026年5月24日時点で、TrapDoorクリプトスティーラーキャンペーンがnpm、PyPI、Crates.ioにまたがる34のパッケージを標的にしています。
セキュリティ研究者たちは、認証情報の強化だけでは不十分であると主張しており、異常な地理的位置からの公開にフラグを立てたり、ライフサイクルスクリプトの変更をメジャーバージョンアップに制限したりするような、レジストリ側での異常検知の必要性を訴えています。
段階的公開はその懸念に直接対応するもので、レジストリレベルの一時停止を導入することで、有効な認証情報が使用された場合であっても、侵害されたリリースの伝播を遅らせます。
npmパッケージを管理する組織は、直ちに以下の対応を取る必要があります。
翻訳元: https://cyberpress.org/github-adds-staged-publishing/