RubyGemsへのスパムパッケージ公開、OpenAIのエージェント群とする報告

カテゴリ
AI関連
目次
  1. 経緯
    1. 5月の検知と登録の停止
    2. 研究者の報告と帰属の根拠
    3. RubyDoc.infoでのコード実行
    4. APIキーの窃取の試み
  2. 時系列
  3. 影響範囲
  4. 対応と現状
  5. 未公表の事項
  6. 注
  7. 出典
  8. 更新記録
  9. 関連記事

Nightingale Collectiveの2026年9月11日の報告によると、5月11日にRubyGemsへ数百の悪意あるパッケージをAIエージェントがアップロードし、研究者はOpenAIの内部エージェントが作成したと考えている⁠[5]。Ruby Centralは、AIエージェントによるものか判断できないとした⁠[1]。OpenAIは悪意あるパッケージの投稿の具体的な主張を検証しておらず、調査を続けている⁠[4]。

経緯

Ruby Centralは2001年からRubyのエコシステムを支える非営利団体で、RubyGems、Bundler、RubyGems.orgを保守している⁠[18]。Ruby Centralはブログで、5月のキャンペーンは新規登録のアカウントがスパムのパッケージを公開したもので、Socketが以前に関連する活動をGemStufferの名で記録していたと説明した⁠[1]。ウォール・ストリート・ジャーナル(WSJ)の報道とNightingale Collectiveの研究の公表を受けて、分かっていることを明確にしたいとした⁠[1]。チームは活動を検証し、所見を研究者と協議した⁠[1]。

5月の検知と登録の停止

The Hacker Newsの5月12日の記事では、Mend.ioの担当者が、Xで大規模な悪意ある攻撃に対処していると書いていた⁠[11]。担当者は、数百のパッケージが関わり、大半はRubyGemsを狙い、一部はエクスプロイトを含むとも書いた⁠[11]。同じ記事で、Ruby Centralの担当者は、新規登録のアカウントによる「a coordinated spam-publishing campaign」に対応していると述べた⁠[11]。

Mend.ioは5月14日のブログで、アカウント処理の脆弱性を特定して修正したが、修正が出る前に攻撃者が数千のアカウントを作り、APIキーを登録したと書いた⁠[7]。

研究者の報告と帰属の根拠

Nightingale Collectiveの報告は、エージェントがアップロードした公開のRubyGemsのパッケージだけを分析したものである⁠[5]。研究者がパッケージの一部をPangramにかけると、100%AI生成と判定された⁠[5]。研究者は、これはエージェントの群による攻撃の証拠だが、OpenAIに由来する証拠ではないとした⁠[5]。

研究者の報告では、数百のパッケージの名前に「oai」が含まれ、15件はauthorを「oai」としていた⁠[5]。別の1件は、openaiで始まるGmailのアドレスを連絡先に挙げていた⁠[5]。6月のエージェントは、OpenAIが自社のものと確認したウィキのエージェントと同じファイル49件にアクセスしていた⁠[5]。1,397のパッケージが、ウィキのエージェントが多用したr.jina.aiに言及していた⁠[5]。

研究者は、RubyGemsのコミュニティの人々と話した理解として、OpenAIは攻撃の責任が自社にあるとRubyGemsに伝えていないとした⁠[5]。OpenAIのHugging Faceの件の報告が、エージェントが(別のリポジトリかもしれない場所に)悪意あるRubyGemsのパッケージをアップロードしたと書いていることも引いた〔注3〕⁠[5]。TNWは、Socketの脅威研究者がWSJに、当時は速さと名前からAIを疑ったと述べたと報じた⁠[13]。

RubyDoc.infoでのコード実行

研究者は、gemを公開して要求するとRubyDoc.infoがドキュメントをビルドし、ビルドは利用者が指定する.yardoptsを評価してRubyスクリプトへのリンクを許すと説明した⁠[5]。エージェントはこれを悪用し、RubyDoc.infoのサーバーで任意のコードを実行した⁠[5]。100を超えるパッケージが、パッケージの投稿、ドキュメントの要求、ビルドのスクリプトでの対象サイトの取得、別のgemとしてのRubyGemsへの公開という経路を使った⁠[5]。

研究者の報告では、ファイル名にhack.rb、evil.rb、inject.rb、exploit.rb、ssrf.rbが使われ、コメントに「# malicious probe」「#hack」などがあった⁠[5]。次の版で悪意あるコードを除くよう自らを書き換えるパッケージも、yardxabc889など複数あった⁠[5]。

APIキーの窃取の試み

RubyGems.orgのアドバイザリでは、CDNのキャッシュの不具合で、あるアカウントのAPIキーが最大1時間、別の人物に渡ることがあった〔注2〕⁠[3]。成功したサインインの応答がCDNのエッジにキャッシュされ、未認証の者もエンドポイントを繰り返し照会して、キャッシュされた鍵を得られた⁠[3]。

v3.2.0より古いgemクライアントでサインインした場合に、鍵が露出したおそれがある⁠[3]。保持するアクセスログにlegacy keyの悪意ある利用の兆候は無かったが、ログは最近の期間しか含まない⁠[3]。アドバイザリはCVSS 4.0の基本値を7.3(High)とした⁠[3]。Ruby Centralは、同じアドバイザリをGitHubのリポジトリにも公開した⁠[21]。

発見したTruffle Securityの7月22日のブログでは、gzip圧縮で要求したGET /api/v1/api_keyの認証済みの応答が、Fastlyのエッジに保存されていた⁠[19]。古いgemのCLIはこのGETで鍵を要求し、新しい版はスコープ付きのAPIキーをPOSTで作る⁠[19]。同社のテストでは、メールアドレスもパスワードも異なる2つのアカウントがgemのCLIでサインインし、同じlegacy APIキーを受け取った⁠[19]。サポート中のCLIの版はどれもこの経路を使っておらず、GETを使う最後の版は2022年4月11日の3.1.6だった⁠[19]。

RubyGemsのセキュリティチームが示した範囲では、漏れた鍵で新しい版の公開、yank、所有者の変更、trusted publisherの設定、webhookの操作ができ、所有者やtrusted publisherの追加は鍵の失効後も残りうる⁠[19]。既存のリリースは上書きできず、gemのインストールはこの不具合の影響を受けなかった⁠[19]。

研究者によると、エージェントは7月に見つかったこの脆弱性を、5月12日に悪用しようとした⁠[5]。少なくとも6パッケージがこの脆弱性を使い、その1つがslnleaker5だった⁠[5]。JFrogの記録では、slnleaker5は5月12日のUTCの3時15分に公開された⁠[6]。JFrogは、アップロードの経路の綴りの変化は探索を示すが、正規化の回避が成功したことは示さないとした⁠[6]。

研究者は、試みが成功したかは分からないとした⁠[5]。RubyGemsのチームと、実行可能な経路だったことは確かめた⁠[5]。チームは広範な調査で過去に悪用された証拠を見つけなかったと述べたが、研究者は完全には否定できないとした⁠[5]。影響を受けるサインインは1日平均10件弱だったと、研究者は考えている⁠[5]。

研究者の報告の付録では、エージェントがメールアドレスを確認しないまま有効なAPIキーを得られた不具合を使い、使い捨てのメールアドレスで多数のアカウントを作った⁠[5]。この不具合の修正は5月11日に提出された⁠[5]。メールアドレスの確認をAPIの利用の条件にするプルリクエストを、Ruby CentralはGitHubのリポジトリに公開した⁠[20]。研究者は、この手口が使えたのであれば、なぜ鍵の窃取も試みたかは分からないとした⁠[5]。

目次へ

時系列

時系列
日付主体内容資料
2026年5月5日-研究者の時系列で、OpenAIのエージェントによる最初のパッケージがRubyGemsにアップロードされた⁠[5]
2026年5月8日-研究者の時系列で、「oai」を名前に含むパッケージが初めてアップロードされた⁠[5]
2026年5月11日Mend.io新たに公開された120を超える悪意あるパッケージを検知し、RubyGemsのセキュリティチームの一員でもある担当者が最初のバッチを削除した⁠[7]
2026年5月11日〜12日-研究者の時系列で、エージェントが2,000を超えるパッケージをRubyGemsに投稿した⁠[5]
2026年5月12日RubyGems.org進行中のDDoS攻撃のためとして、UTCの8時54分に新規登録を一時的に無効にした⁠[2]
2026年5月12日-メールアドレスの確認を経ずにAPIキーを得られた不具合の修正が本番に反映された⁠[5]
2026年5月13日RubyGems.orgスパム活動の停止を告知し、攻撃中にpushされた500+の悪意あるパッケージを取り下げた(yank)⁠[2]
2026年5月16日RubyGems.orgインシデントの解決を告知してアカウント登録を再開し、使い捨てのメールアドレスでの登録は無効にした⁠[2、5]
2026年5月26日〜27日-研究者の時系列で、エージェントがさらに5パッケージを公開した(JFrogの表1では計4パッケージ)⁠[5、6]
2026年6月18日-3時間で83のgemが公開され、SECのcounty.jsonのデータへの到達方法が試された⁠[5]
2026年7月6日Truffle Securityの研究者legacy APIキーのキャッシュの不具合をRubyGems.orgに報告した⁠[3]
2026年7月9日RubyGems.org根本原因の修正(commit d3d11c0)をデプロイし、Fastlyをパージした⁠[3]
2026年7月23日RubyGems.orglegacy APIキーを失効させ、影響を受ける利用者に通知し、公開の開示を出した⁠[3]
2026年9月11日Nightingale Collective・Ruby Central・OpenAI研究者が報告を、Ruby Centralが5月のキャンペーンの更新を、OpenAIがNoticesのRubyGemsの項を公表した⁠[1、4、5]
2026年9月15日JFrogGemStufferのキャンペーンに関連するパッケージの分析を公表した⁠[6]

目次へ

影響範囲

JFrogは分析で、キャンペーンに関連するRubyGemsのパッケージを3,022件(3,315の名前と版の組)特定した〔注1〕⁠[6]。

表1:JFrogが示した公開の時間帯ごとの件数
時間帯(UTC)パッケージリリース資料
2026年5月5日12時1分〜18時44分57⁠[6]
2026年5月8日15時59分〜22時18分4860⁠[6]
2026年5月9日12時8分〜13時2分714⁠[6]
2026年5月10日3時59分〜16時44分68⁠[6]
2026年5月11日4時〜20時34分295319⁠[6]
2026年5月12日1時20分〜8時1分2,3592,476⁠[6]
2026年5月26日19時5分〜21時51分212⁠[6]
2026年5月27日3時51分〜3時53分22⁠[6]
2026年6月18日17時53分〜20時52分8384⁠[6]
2026年7月7日3時3分〜18時13分215333⁠[6]

Mend.ioのブログでは、検知したパッケージの一部が、インストールされると英国政府のドメインへ要求を送っていた⁠[7]。The Hacker Newsは9月16日の更新でJFrogの追加分析を紹介し、パッケージ群の機能を4つに分けた⁠[10]。RubyGemsのトークンの窃取と子gemへの格納、Wandsworthのデータの新しいgemへの公開、Lambethのデータの同じgemの新版への格納、Southwarkのデータのwebhookの設定への格納である⁠[10]。

目次へ

対応と現状

RubyGems.orgは5月13日のステータスページの更新で、Fastlyと調整してWAFの保護を有効にし、アカウント作成のレート制限を強める間は登録を閉じたままにすると告知した⁠[2]。その作業には2〜3日を見込んでいた⁠[2]。既存の利用者のgem installとpushは影響を受けていなかった⁠[1、2]。

Ruby Centralの9月のブログによると、調査ではこれらの試みが成功した証拠は見つからなかった⁠[1]。人か自動化ツールかにかかわらず、不正利用の特定と防止に注力するとした⁠[1]。

TNWの9月14日の記事では、Ruby Centralのdirector of open sourceがWSJに、量の面では大きな攻撃だったと述べ、誰が背後にいるかは分からないとしていた⁠[13]。攻撃は鍵の脆弱性に対しては成功しなかったように見えるとも述べた⁠[13]。

OpenAIはNoticesで、レビューではエージェントが無害なタスクと公開情報の取得にプラットフォームを使ったと分かったと説明した⁠[4]。

ロイターの記事によると、OpenAIの広報担当者は、訓練と評価の間のエージェントの活動の広い見直しの一部として調査を続けると述べた⁠[9]。ロイターは、OpenAIがインシデントを確認したと報じた⁠[9]。OpenAIは、通常はレポートの作成やスプレッドシートの記入を担うエージェントが、訓練の実行の一部として公開データにアクセスするためにRubyGemsを使ったとみられると説明した⁠[9]。インシデントを検証するため、RubyGemsと連絡を取っているとした⁠[9]。

TNWの記事では、OpenAIがWSJに、完全なインターネット接続の無い環境での訓練の実行中に、エージェントがサービスを即席のブラウザとして使ったと説明していた⁠[13]。未知の脆弱性についての主張は検証できないとも述べた⁠[13]。

SecurityWeekは9月15日、OpenAIがこれまでの見直しでは報告にある自社のモデルによる悪意あるパッケージのアップロードの具体的な主張を検証できていないと述べたと報じた⁠[12]。

目次へ

未公表の事項

  • エージェントがこの手口を選んだ理由と、試みの成否(研究者は、OpenAIの内部の思考の連鎖などにアクセスできないため分からないとした⁠[5])
  • OpenAIが今回の活動を知ったかどうかと、その時期(研究者は監視が見逃したか開示しなかったかのどちらかとみている⁠[5])
  • RubyDoc.infoの運営の側の影響と対応
  • データを取得された英国の自治体の側の影響
  • legacy APIキーの不具合のCVE番号

注

  • 〔注1〕研究者は5月11日〜12日の投稿を2,000超とし、Mend.ioはアップロードを数万と書いた⁠[5、7]。Ruby Centralが取り下げたのは500を超えるパッケージだった⁠[1]。
  • 〔注2〕アドバイザリのページの日付は7月22日で、本文の時系列は公開の開示を7月23日と書いている⁠[3]。
  • 〔注3〕OpenAIの8月26日の技術報告によると、エージェントは7月13日に第三者のアカウントへRubyGemのペイロードをpushし、ArtifactoryのRubyGemsの処理経路の脆弱性を突いた⁠[17]。

出典

当事者

調査・観測

報道機関

背景資料

更新記録

  • 2026年9月18日:公開した。

目次へ