「悪意あるnpmパッケージをインストールさせない」 GitHubが発表した2つの防止策人間の承認を必須にする

CI/CDを乗っ取り「悪意あるnpmパッケージ」を流通させる攻撃が深刻化。GitHubは、2つの機能追加を発表した。

» 2026年07月01日 13時00分 公開
[@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 近年、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.

アイティメディアからのお知らせ

スポンサーからのお知らせPR

注目のテーマ

その「AIコーディング」は本当に必要か?
Microsoft & Windows最前線2026
4AI by @IT - AIを作り、動かし、守り、生かす
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。