「悪意あるnpmパッケージをインストールさせない」 GitHubが発表した2つの防止策:人間の承認を必須にする
CI/CDを乗っ取り「悪意あるnpmパッケージ」を流通させる攻撃が深刻化。GitHubは、2つの機能追加を発表した。
近年、npmレジストリを狙うソフトウェアサプライチェーン攻撃が深刻化している。CI/CD(継続的インテグレーション/継続的デリバリー)ワークフローや自動化されたパブリッシュフローを乗っ取られると、サイバー攻撃者は悪意あるパッケージをレジストリに公開できてしまう。
開発者が正規パッケージと思ってnpmパッケージをインストールすることを狙った攻撃を防ぐべくGitHubは2026年5月22日(米国時間)、npmのサプライチェーンセキュリティに関連する2つの更新を発表した。
人間の承認を必須にする「ステージドパブリッシング」
1つ目は一般提供開始となった「ステージドパブリッシング」だ。従来の直接公開では、コマンドを実行した時点でパッケージのバージョンが即座に利用者に提供される。ステージドパブリッシングでは、事前ビルドしたtarballをまずステージキューにアップロードし、メンテナーがキューを確認して明示的に承認した時点でインストール可能になる。ステージキューは「npmjs.com」「npm CLI」の両方で可視化される。
ステージドパブリッシングは、公開のたびに「人間の介在の証明(proof of presence)」を強化する。対話的でないCI/CDワークフローからのパブリッシュや、OIDC(OpenID Connect)を用いたトラステッドパブリッシングも対象だ。レジストリに公開する前には、二要素認証(2FA)を完了したメンテナーによる承認が必須となる。
ステージドパブリッシングは既に提供開始されており、下記ドキュメントも公開されている。
ステージドパブリッシングを利用するには、npm CLI 11.15.0以降が必要だ。ステージ動作を有効化したいCI/CDワークフローでは、「npm publish」の代わりに「npm stage publish」コマンドを使うようワークフローを更新する必要がある。
GitHubは、ステージドパブリッシングを、トラステッドパブリッシングと組み合わせて利用することを推奨している。トラステッドパブリッシングの構成はステージ専用に制限でき、当該ワークフローからの「npm publish」コマンドは拒否され、「npm stage publish」コマンドのみが受け付けられる。
CIワークフローは非対話的に動作を継続し、メンテナーは後からWebサイトまたはCLIから、ステージされたバージョンを承認する。「npm stage publish」コマンドをローカル環境で実行することもできるが、最も効果的な構成はCIによるステージキューへの公開と、信頼された端末からのメンテナー承認との組み合わせだ。
2026年2月にリリースされたトラステッドパブリッシング構成の一括管理機能を既に運用している場合、これを利用して既存パッケージをステージドパブリッシングに移行できる。その際もCIワークフローを新CLIバージョンに更新し、「npm stage publish」コマンドを使うよう変更する必要がある。
新たな3つのインストールソースフラグ
2つ目の機能追加は、3つのインストールソースフラグだ。npm 11.10.0で導入された「--allow-git」フラグによって、「npm install」コマンドがGitソースから依存関係を解決するかどうかを制御できるようになった。npm 11.15.0からは、レジストリ以外の全インストールソースに同様の明示的な許可リスト方式を適用できるように3つのフラグが追加される。
- --allow-file
ローカルファイルパスおよびローカルtarballからのインストールを制御する - --allow-remote
リモートURLからのインストールを制御する。HTTPSのtarballも対象に含む - --allow-directory
ローカルディレクトリからのインストールを制御する - --allow-git(既存)
全てのGitソースからのインストールを制御する。「github:」「gitlab:」「git+」URL、「owner/repo」形式の省略表記なども対象に含まれる
各フラグは「all」(現在の既定値)または「none」を指定できる。「.npmrc」または「package.json」の設定にも記述可能だ。詳細は「npm install」レファレンスと設定レファレンスで参照できる。
移行時の注意:「--allow-git」既定値変更の予告
2026年2月の発表で既に告知されている通り、「--allow-git」の既定値は次のメジャーバージョン(v12)で「all」から「none」に変更される予定だ。今回11.15.0で追加された「--allow-file」「--allow-remote」「--allow-directory」も、明示的に「none」に設定することで、現時点からより厳格な動作にオプトインできる。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
「開発者はおいしい脆弱性になった」 AIコーディング、採用、OSS、CI/CD“4つの包囲網”と生存戦略
AIコーディングやAIエージェント、OSS、CI/CD自動化、クラウドサービスなどの普及によって、開発者はこれまで以上に多くの権限や認証情報を扱う存在になりました。その結果、開発者自身が最も効率の良い「侵入口」として攻撃者に狙われ始めています。
AIプログラミング時代に潜む罠 ソフトウェアサプライチェーンの現在と身を守るための新常識
AIによって誰もがコードを書けるようになったが、開発者はソフトウェアサプライチェーン攻撃のリスクにさらされている。本稿では、そもそもソフトウェアサプライチェーンとは何なのかを振り返り、開発者が何に気を付け、どのような対策をとるべきなのかを分かりやすく解説する。
開発者を狙う大規模フィッシングに注意 約6週間で250通以上の攻撃メール
Proofpointは、北朝鮮系アクター「UNK_DeadDrop」が開発者を標的にした大規模フィッシング活動を展開していると報告した。攻撃者は、約6週間で250通を超える攻撃メールを送信し、100以上の組織が標的になっているという。
Microsoftのシステムが外部パッケージを実行? 依存関係混乱を巡る攻防
Microsoftのシステムで、第三者が公開したnpmパッケージが実行された。研究者は重大なサプライチェーンリスクだと訴えるが、Microsoftは脆弱性ではないと判断した。なぜ同じ事実を前に評価が真っ二つに割れたのか。
6分に1つのペースで悪性パッケージが見つかる オープンソースエコシステムを狙う攻撃の実態
Sonatypeのレポートによると、2026年第1四半期(1〜3月)に2万1764件の悪意のあるオープンソースパッケージを検出したという。