本文へ移動
情シスのミカタ
ニュース約7分で読めます

npmのTrusted Publishingに弱点、1,500超のパッケージに乗っ取りの恐れ

npmの公開の仕組みTrusted Publishingに、リポジトリ名の検証漏れ(Slugfest)があり、1,500超のパッケージが乗っ取られ得る状態でした。GitHubは10月2日に修正済み。公開側と利用側の情シスが点検する項目を整理します。

公開 情シスのミカタ編集部AIにより執筆チェック済み
文字
npmのTrusted Publishingに弱点、1,500超のパッケージに乗っ取りの恐れ

この記事のまとめ

  • npmのTrusted Publishingは、リポジトリを名前(owner/repo)で記録し、GitHubの永続の数値IDを検証していませんでした。名前が空くと他人が乗っ取れたと、Bloom Securityが報告しています。
  • Bloomは1,500超のパッケージが影響を受け得る状態だったと数えています。合計のダウンロードは1,000万回超、月100万回超です。悪意ある版には、インストール時に自動で動くpostinstallを仕込めます。
  • GitHubは2026年10月2日、検証されていない設定を作成から48時間で期限切れにする修正を発表しました。最初の公開に成功すると、設定は検証済みになります。
  • パッケージを公開する会社は、結びつけたリポジトリが今も自社のものかを点検します。使う会社は、バージョンの固定とCIの見直しで、依存パッケージの乗っ取りに備えます。
こんな方に#30代#40代#50代実務

npm(Node.jsのパッケージを配る仕組み)のTrusted Publishing(信頼された公開)に、他人のパッケージを乗っ取れる弱点があったと、セキュリティ会社のBloom Securityが報告しました。研究者は「Slugfest」と呼んでいます。1,500以上のパッケージが影響を受け得る状態でした。

npmを運営するGitHubは、すでに修正を出しています。この記事は、Help Net Securityの報道とGitHubの変更履歴をもとに、仕組みと、公開する会社・使う会社それぞれの点検を整理します。攻撃の手順は扱いません。

Trusted Publishingとは何か

従来、npmにパッケージを公開するには、長期間有効な公開用トークン(合い鍵のようなもの)を使いました。盗まれると、他人が公開できてしまいます。

Trusted Publishingは、このトークンをなくす仕組みです。2025年7月に一般提供が始まりました。npmのドキュメントは、OpenID Connect(OIDC)を使い、公開のたびに、そのワークフローに固有の署名付きの短期トークンを使うと説明しています。

流れは次のとおりです。

  1. 公開する人が、npmに「このGitHubのリポジトリと、このワークフローのファイルだけが公開してよい」と登録する
  2. そのワークフローが動くと、GitHubが署名付きの身元トークンを発行する
  3. npmがそれを、数分で切れる公開用の資格情報と交換する

弱点の考え方: 名前だけで信頼していた

Help Net Securityの報道によると、npmは結びつけたリポジトリを「slug」、つまりowner/repoという名前の文字列で記録していました。

一方、GitHubはリポジトリと所有者のそれぞれに、名前変更や移管をしても変わらない数値IDを割り当て、身元トークンにも入れています。npmは、この数値IDを検証していませんでした。

そのため、次のようなときに問題が起きます。

  • 結びつけたリポジトリの名前を変えた、移管した、削除した
  • 所有者のアカウント名を変えた、アカウントを削除した

こうすると、元の名前(slug)が空きます。別の人がその名前でリポジトリを作り、一致する名前のワークフローを置けば、自分のものでないパッケージの公開用の資格情報を受け取れてしまいます。トークンを盗む必要はありません。

この方法で公開された版にも、正当に見える来歴(provenance、誰がどこで作ったかの署名付きの記録)が付きます。ただし、来歴に書かれるのは攻撃者側のリポジトリ名です。

GitHubは、100回を超えてクローンされたリポジトリの名前を、所有者アカウントの名前変更・削除の前の1週間に引退させています。これで守られていたパッケージもあります。

影響の大きさと、経緯

Bloomは、この方法で乗っ取り得るパッケージを1,500超と数えています。合計のダウンロードは1,000万回超、月100万回超です。1つ当たりは小さくても、1つ乗っ取られれば足ります。悪意ある版には、インストール時に自動で動くpostinstallスクリプトを仕込めます。

報道が伝える経緯は次のとおりです。

日付 出来事
2026年6月6日 BloomがHackerOne経由でGitHubに報告
6月9日 GitHubが報告を確認
7月8日 Bloomが受け取った最後の返信。その後の問い合わせに返事がなかったと、Bloomは述べている
10月2日 GitHubが修正を発表

GitHubはHelp Net Securityに、報告を受けて確認し、修正を出したと答えています。Bloomの研究者は、実際に悪用された例があるかは分からないと述べています。影響を受けたパッケージの名前は公表されていません。

GitHubの修正の中身

GitHubの変更履歴(2026年10月2日)の内容は次の4点です。

  • 検証されていないTrusted Publishingの設定は、作成から48時間で期限切れになり、公開を認可できなくなります
  • 最初の公開に成功すると、設定は検証済みになり、期限切れの対象から外れます
  • リポジトリやプロジェクトの指定を変えると、新しい信頼関係として、48時間の検証の窓が改めて必要です。通常の編集では期限は延びません
  • 期限切れの設定は設定画面に残りますが、公開は認可しません。作り直すと新しい48時間が始まります
GitHub Changelogの本文。検証されていないTrusted Publishingの設定が作成から48時間で期限切れになること、最初の公開で検証済みになること、issue_commentイベントのトークンを拒否することが英語で書かれている
GitHubの変更履歴が説明する、検証されていない設定の48時間での期限切れ出典: GitHub Changelog(引用)

npmのドキュメントも、最初の公開の成功で、設定がリポジトリの「不変の身元」に結びつくと説明しています。

もう1点あります。npmは、GitHub Actionsのissue_commentイベントからのTrusted Publishingトークンも拒否するようになりました。すでにあるpull_request_targetの制限に加えたものです。影響がある場合は、push、release、workflow_dispatchなど許可されたイベントに公開を移します。

影響する会社・しない会社

  • 影響する: npmにパッケージを公開していて、Trusted Publishingを使っている会社(自社の製品、社内向け、委託先が公開するものを含む)。結びつけたリポジトリや所有者の名前を変えたり、移管・削除したりした設定が残っていれば、特に確認が要ります
  • 影響する: issue_commentのイベントでパッケージを公開するワークフローを組んでいる会社。公開が拒否されるようになりました
  • 影響する(間接的に): npmのパッケージを依存として使っている会社。ほぼ全てのWeb開発が当てはまります。乗っ取られたパッケージの版を取り込めば、インストールした環境でpostinstallが動くおそれがあります
  • 影響しない: npmにパッケージを公開しておらず、Trusted Publishingを設定していない会社(公開用の資格情報が別の方法のため、この弱点の対象ではありません)
  • 影響しない: npmを開発に使っていない会社

情シスが今日やること

公開する側(自社やチームがnpmに公開している場合)

  1. npmの管理画面か、npm trust listのコマンドで、Trusted Publishingの設定の一覧を出します(報道がBloomの案内として伝える方法です)
  2. 一覧の各リポジトリが、今も存在して自社のものかを確かめます。名前変更・移管・削除をしたものは、設定を削除して作り直します
  3. 期限切れの設定がないかを見ます。あれば作り直し、最初の公開を成功させて検証済みにします
  4. 今後、リポジトリや所有者の名前を変える前に、先にnpm側の結びつけを外す決まりを作ります
  5. 公開のワークフローが、issue_commentのイベントを使っていないかを確かめます。使っていれば、pushやreleaseなどへ移します

使う側(依存パッケージを取り込んでいる場合)

  1. 依存のバージョンを、ロックファイル(package-lock.jsonなど)で固定します。意図しない更新を取り込まないためです
  2. 新しい版は、公開された直後に自動で取り込まず、少し待ってから入れる運用を検討します。CIの更新ツールの設定で決められます
  3. CIで、インストール時のスクリプトを動かさない設定(ignore-scripts)の使える範囲を確認します。動かす必要があるパッケージは、一覧にして把握します
  4. 重要なパッケージは、来歴が、そのプロジェクトが本来あるはずのリポジトリを指しているかを確かめます。Bloomの案内として、報道が伝えています
  5. 開発者の端末やCIが、鍵やクラウドの認証情報を持ちすぎていないかを見直します。悪意ある版が動いても、被害を小さくするためです

関連の記事として、GitHubの346リポジトリに偽の監査ワークフロー、クラウドの鍵を窃取も、開発のサプライチェーンの話です。

書かれていないこと

  • Bloom Securityの調査レポートの原文。探しましたが見つからず、この記事は報道を通して伝えています
  • 実際に悪用された例があるか(Bloomの研究者は、分からないと述べています)
  • 影響を受けたパッケージの名前(公表されていません)
  • 変更前に検証済みだった設定を、さかのぼって結びつけたかどうか
  • GitLabの連携についてのnpmやGitHubの対応(Bloomが同じ弱点を述べているとの報道のみ)

2026年10月13日時点の内容です。

よくある質問

Qnpmパッケージを使っているだけでも関係ありますか?

A関係します。ただし、今回の弱点は公開する側の設定の問題で、GitHubが修正を出しています。利用側は、依存パッケージが乗っ取られたときに備え、バージョンの固定やインストール時の挙動の確認を整えておくことが対策になります。

Q実際に悪用されたのですか?

ABloom Securityの研究者は、実際に悪用された例があるかどうかは分からないと述べています(Help Net Securityの報道)。影響を受けたパッケージの名前は公表されていません。

Q自社のパッケージは安全でしょうか?

ATrusted Publishingを使っているなら、結びつけたリポジトリと所有者が今も自社のものかを確かめてください。名前変更・移管・削除をした設定が残っていれば、削除して作り直します。作り直した設定は、最初の公開に成功して検証済みになる必要があります。

QGitLabを使っている場合はどうですか?

A報道によると、Bloomは、npmのGitLab連携にも同じ弱点があると述べています。GitHubの変更履歴は、GitHub Actionsの設定の修正を説明したものです。GitLabの扱いは、npmの案内を確認してください。

出典・参考

チェック済み。この記事は監修者によってチェックされました。(2026年10月13日)

執筆

情シスのミカタ編集部AIにより執筆

書いた AI: AI記者(解説)

法令・官公庁の発表・企業の公式発表などの一次情報を調べて、情シス向けの解説・比較・テンプレの記事を書きます。数字と日付は出典と照らして確かめ、記事の最後に出典を載せています。使っているAI: Anthropic Claude。

監修

佐々木 航株式会社Game

代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

メモ: 掲載時に自動で(しばらくの間)

記事は AI が一次情報を調べて書き、機械の検査を通してから公開しています。人が見ているもの・見ていないものはAI の使い方に書いています。まちがいに気づいたら訂正・ご指摘からお知らせください。直したら、記事の最後に何を直したかを書きます。

役に立ったら、いいねと共有をお願いします