世界を動かす技術を、日本語で。

Rubygems.org AWSルートアクセスイベント – 2025年9月

概要

  • 2025年9月に発生した AWS rootアクセスインシデント の詳細な経緯と対応策の公開
  • 元管理者による RubyGems.org本番環境へのアクセス問題 の発覚と調査
  • ユーザーデータや運用への影響なし と確認済み
  • インシデントの原因分析と 再発防止策の導入
  • Ruby Centralによる 透明性確保と信頼回復への取り組み

2025年9月AWS rootアクセスインシデントの事後レビュー

  • 2025年9月30日、元管理者の André Arko氏 がRubyGems.org本番環境へのアクセスが可能であることをRuby Centralに報告
  • 同日、 Joel Drapper氏 がrootアカウントアクセスの証拠を含むブログ記事を公開
  • Ruby Centralは即座に インシデント対応チームを結成、全サービスと認証情報の調査・確認を実施
  • AWS rootアカウントのパスワードが 2025年9月19日に不正に変更 されていたことを発見
  • AWS CloudTrailやDataDogアラート、IAM設定の調査 により、不正アクセス経路と影響範囲を特定
  • すべてのroot/IAM認証情報の 無効化と再発行、MFA強化、監査ログ付きの安全な保管 を実施
  • 外部専門家を交えたセキュリティ監査 を開始

インシデントの経緯と分析

  • Ruby Centralのインフラは AWS上で運用、root認証情報はエンタープライズパスワードマネージャーで共有管理
  • 2025年9月18日、 André Arko氏のアクセス権削除 を通知し、個別AWS認証情報は削除したが rootパスワードの変更を失念
  • 9月19日以降、 米国・日本・ロサンゼルスからの不正rootアクセス を複数回検知
  • 不正アクセス者による ユーザーグループからの削除や権限剥奪、IAM情報の列挙 を確認
  • 9月30日、Ruby Centralが rootアカウントを緊急復旧 し、以後は正規管理下に移行

インシデントの影響範囲

  • ユーザーデータ、アカウント、gems、インフラ稼働状況に影響なし
  • RubyGems.orgは 終始稼働を維持
  • PIIや財務データへのアクセス・流出なし
  • 本番DB、S3、CI/CDパイプラインへの影響なし
  • 認証情報の未ローテーションと情報公開の遅れ が重大な手順上の失敗

インシデント解決のための対応

  • すべての root/IAM認証情報の無効化・再発行・MFA化・厳格な保管
  • DataDogやGitHub Actionsなど 関連シークレット・トークンのローテーション
  • AWS CloudTrail・GuardDuty・DataDogアラート によるroot操作の監視強化
  • 全IAMロールとポリシーの 最小権限化とレガシー権限の削除
  • 外部監査人によるフルセキュリティ監査 の実施
  • セキュリティ運用手順書の 即時パスワード・鍵ローテーション、四半期ごとの認証情報レビュー、連絡体制の明文化

根本原因の分析

  • エンタープライズパスワードマネージャーからのアクセス削除後も、認証情報が外部にコピーされていた可能性 を考慮せず
  • rootアカウントのパスワード・MFA未ローテーション
  • これらにより不正アクセス者が 本番インフラに侵入し、正規管理者の排除や復旧妨害を試行

再発防止策

  • アクセス権剥奪時の手順・チェックリストの見直し、パスワードマネージャーへのアクセスも即時停止
  • 非連携型の認証情報(特に共有認証情報)の即時ローテーション
  • 外部専門家による独立したセキュリティ監査の実施
  • 正式なOperator/Contributor Agreementの策定、本番アクセス権限の範囲と条件の明確化

セキュリティインシデントとしての扱い理由

  • 多数のRubyGems.orgシステムが 単一個人の管理下 にあったことを問題視
  • 運用アクセス権の正式な合意書による管理体制への移行 を決定
  • 2025年8月、 Ruby Centralが約$762,000のオープンソース契約予算を見直し
    • RubyGems.orgの二次オンコール業務を 有償からボランティア運用へ移行 方針
    • Arko氏のコンサルタントから PII含むHTTPアクセスログと引き換えに無償で継続 の提案
    • これが プライバシー・利益相反・ガバナンス上の懸念 となり却下、運用体制の抜本的見直しへ
  • Arko氏が PII含む本番システムへのアクセスを保持していた事実 が発覚し、即時セキュリティインシデントとして対応

まとめと今後の方針

  • 現時点でユーザーデータの不正取得や流出の証拠はなし
  • コミュニティの 信頼回復と透明性向上 に向け、詳細な情報公開と再発防止策の徹底
  • Ruby Centralは 運用・データ・プライバシーの安全性担保プロフェッショナルな管理体制の維持 を最優先

上記の内容は、Ruby Centralが インシデント対応の透明性コミュニティへの説明責任 を果たすためにまとめたものです。

Hackerたちの意見

リードを埋めちゃったね… アルコは、彼のコンサルタント会社がデータをマネタイズできるように、rubygems.orgのHTTPアクセスログのコピーが欲しかったんだ。RCが二次的なオンコールの予算がないって判断した後にね。それから、彼がメンテイナーを外された後にログインしてAWSのルートパスワードを変更したんだ。

本当にすごい状況だね。ある意味、この投稿はRCがなぜそんなに所有権を持ちたがったのかを正当化してると思う。つまり、ユーザーデータを売ってお金を稼ごうとしてるメンテナがいるわけで。でも、アクセス権を取り消す際のひどいコミュニケーションと初心者のミスが、今後のサービスのセキュリティに対する信頼を損なってる。法律的に「rubygemsリポジトリ」を誰が所有してるのか(インフラだけじゃなく)や、なぜそれを主張する権利があると思ったのかの説明もないし、「他の」側と争ってることなんだよね。全体的にめちゃくちゃで、誰も良い印象を持てないよ!

AWSルートアカウントの認証情報を回転させるのに失敗した… 共有の企業パスワードマネージャーに保存されている 残念ながら、多くの企業は、以前アクセスしていた従業員が退職した際に、共有のパスワードマネージャーに保存された認証情報を回転させずにそのままにしておくという悪い習慣を続けている。

アルコが不正アクセスの犯人でなかったとしても、これで彼のキャリアはずっと傷つくことになるね。メールの件は別としても。コンサルタントを運営するには最悪のタイミングだよ。彼の他の顧客は今、何を考えているんだろうね。

言語パッケージレジストリのAWSアカウントルートアクセスが11日間もあったんだ。EC2のルートじゃなくて、AWSアカウントのルートだよ。IAM、S3、CloudTrail、すべてを完全にコントロールできる。彼らは「侵害の証拠はない」と主張してるけど、CloudTrailのログはAWSルートが削除したり変更したりできるものだよ。しかも、彼らは「制御を取り戻した後にAWS CloudTrailを有効にした」と認めてるから、侵害の間はCloudTrailが動いてなかったってことだ。ルートが侵害されたシステムのログからサプライチェーンの整合性を確認することはできないし、ログが存在しなかったときにはさらに確認できない(彼らは修復中に有効にしたの?)。だから、もし間違ってたら誰か訂正してほしいけど… 9月19日から30日に公開されたすべてのgemは疑わしいよ。その期間に動いている本番のRubyアプリケーションは、バックドアが仕掛けられていないことを確認する手段がない。正しい対応は、公開を凍結して、ゼロから再構築すること(当時公開されたパッケージも再公開する必要があるのかな?うーん、どうやってやるのかも分からない!)で、オフラインバックアップと照合することだよ。でも、彼らはパスワードを回転させただけで終わらせたんだ。

個人的には、完全な再構築を避ける唯一の方法は、アンドレ・アルコに次のことを認めさせることだと思う:1. 彼が不正な行為者だったことを認める(つまり、犯罪を認めることになる?) 2. 犯罪を犯している間にサービスの整合性を外部に流出させたり変更したりしていないと証言させる。もし私がRuby Centralなら、#1については寛大に対応して、#2を条件にすると思うし、#2はアンドレ・アルコにとっても助けになると思う。

もう少し考えてみると… 競合プロジェクトの立ち上げのタイミングで、何かが起こって前の incumbents に対する信頼が完全に損なわれる可能性があるって、確かに面白いよね?おかしい!

投稿の文脈を考えると、「AWS CloudTrail、GuardDuty、DataDogのアラートを有効にした」というのは、「CloudTrail、GuardDuty、Datadogを通じてアラートを有効にした」という意味で、「CloudTrailのログを有効にした」というわけではないみたい。そうじゃなきゃ、CloudTrailを見直すっていうコメントが意味不明になっちゃうよね。

確かにその通りだね、前は考えたことなかったよ。他の誰も改ざんしてないってどうやって確認するの?RubyCentralはこれを完全に考え抜いてなかったみたいだね。

確か、AWS CloudTrailを有効にしたり無効にしたりはできないよね?トレイルの永続的な保存を有効にすることはできるけど、それが有効になっていても、90日間のイベントには常にアクセスできるよ。

CloudTrailのログはデフォルトで過去90日間が有効になっていて、オフにすることはできず、ルートでも変更できないよ。もしこの「イベント」をArkoのアクセスが終了するはずだった時から始まると考えるなら、それは90日間のウィンドウ内にあって、その期間のログは確かに信頼できるよ。

記事を読む気はないけど、AWSの推奨は、組織内にCloudTrailログだけを保持する別のセキュリティアカウントを持つことだよ。これだとコストが倍になる可能性があるけど、無料のCloudTrailは一つだけだし、デバッグ目的でアカウント内のトレイルを持つのはすごく便利なんだ。組織を使うと、ルートユーザーに対しても広範囲な活動を拒否するSCPをアカウントに付けられるから便利だよ。

この投稿の裏の意味は、無許可の行為者がアンドレ・アーコで、数日前までRubyGems.orgへのアクセス権を持っていたことは明らかじゃない?これを読んで感じるのは、彼がそうだと信じてることをはっきりさせようとしてるけど、名前を挙げないのは、そうすることで彼を犯罪行為で非難することになるからだと思う。

もし本当に第三者とデータを共有することに倫理的な懸念があるなら、プライバシーポリシーをそれに合わせて更新すべきじゃない?「私たちは、セキュリティに関連するイベントやRubyGems.orgの使用状況を分析するために、IPアドレスや位置情報データなどのウェブトラフィックに関連する情報を収集します。」(https://rubygems.org/policies/privacy)「私たちは、特定の個人を特定しない限り、研究、マーケティング、分析、その他の目的のために、集計または非特定情報を第三者と共有することがあります。」(https://rubycentral.org/privacy-notice/)

これは「ウェブサービスから誰かを締め出す方法が全く分からない」と言うにはかなり面白くて長い言い回しだね。> 1. Ruby Centralは、事件の前に企業パスワードマネージャーを通じて共有認証情報へのアクセスを正しく削除したが、スタッフはこの認証情報が他のパスワードマネージャーにコピーされたり流出したりする可能性を考慮しなかった。 > 2. Ruby Centralは、共有ボールトにアクセスしていた人員が退職した後にAWSルートアカウントの認証情報(パスワードとMFA)を回転させるのを怠った。

そうだよね?!誰もアカウントを無効にすることを考えなかったの?「セキュリティ」がソースリポジトリの強引な引き継ぎの理由だって言ってる人たちなのに、プロダクションインフラを守ってなかったの?

まさかパスワードを書き留めてたなんて考えなかったの?それはすごいね。

みんなには、反応を待つことをおすすめするよ。RubyCentralは今、めちゃくちゃな非難をしてるし、ここ数日間ずっとそうだしね(それに、全ての開発者を解雇して、特にMarty Haughtを責任者にした理由も説明できてないし。論理的に説明できたことがないんだよね。それに、なんでこの書類をもっと早く出さなかったの?ここで待つのはすごく変な感じだよ。もっと早く状況を明確にできたはずなのに、なんか待ってから説明を考えたって感じがする)。RubyCentralの今の戦略、つまり非常に孤立したメールを投稿して「これが最終的な証拠だ」とほのめかすのは受け入れない方がいいよ。メールのやり取りにはたくさんのメールが必要だってみんな知ってるから、こういう部分的な公開は本当に変だよ。それに、対面のミーティングもあったのに、RubyCentralはそこで何が話し合われたかを公開しないのはなぜ?金銭的な圧力で利益相反があったのかな?それに、すでに指摘されてるけど、RubyCentralは弁護士を雇ってるみたいだし、redditの議論を見てみて。これが本当にユーザーや開発者が求める透明性なの?日々状況が悪化してるし、どの視点から見てもRubyCentralが中心にいるし、少なくともたくさんのミスをして、過去のミスを隠そうとして...さらにミスを重ねてる感じだよ。RubyCentralを解散させた方がいいと思う。クリーンな状態から始めようよ。富裕な企業がエコシステム全体の上に立たないようなルールを見つけよう。最後に、この戦略的な中傷は本当にうざい。もし事実に基づく証拠があるなら、裁判に持ち込むべきだし、ないなら人を中傷するのはやめるべきだよ。私の知る限り、RubyCentralはまだ裁判を起こしてないし、起こさないんじゃないかって少し疑ってる。なぜなら、一般市民としては完全な透明性を求めることになるから。RubyCentralの全メンバーとその活動を含めてね。だから私のおすすめは:しばらく待って、告発された人たちの反応を見よう。

告発された人たちの反応を見よう。今まで聞いたのは全部、反対側からの話だけだし... > もし事実に基づく証拠があるなら、裁判に持ち込むべきだよ。驚くべきことに、そうしないなら、弁護士が推奨する開示の量に感じる。 > 富裕な企業がエコシステム全体の上に立たないようなルール。今、私たち全員が不正なメンテナによって人質にされないために止めている唯一のものは、富裕な企業なんだ。

ほんとに混乱するよね。RubyGemsのオフラインツールをGithubで引き継いで以来、Ruby Centralが言ってるのはサプライチェーンのセキュリティが必要だってことだけど、もしこれが前のメンテナを全部排除しようとして(失敗したみたいだけど)数週間以内に起きたことなら、今後のセキュリティに対する信頼感がどうやって生まれるの? 既にアクセス権を持ってた人たちをちゃんと排除できないなら、全てのツールの所有権を集中させることが改善につながるとは思えないよ。

「これらの予算調整に続いて、アーコ氏のコンサルタント会社が、IPアドレスやその他の個人を特定できる情報(PII)を含むプロダクションHTTPアクセスログへのアクセスと引き換えに、無償で二次的なオンコールサービスを提供する提案を提出しました。このオファーにより、アーコ氏のコンサルタント会社はそのデータにアクセスでき、アクセスパターンを分析して、無関係な第三者と共有することでマネタイズできる可能性がありました。」なんだこれ。最近、Ruby gemsの競合インデックスを立ち上げた同じ人だよ。一方で、RubyCentralの行動は本当に無能だったし、どっちが悪いのか分からなくなってきた。

今、チャットでこの件について話しているセキュリティ仲間たちが考えているように、ここでの「無許可の行為者」がアンドレ・アーコだと仮定すると、これはRuby CentralがアーコをRubygems.orgをハッキングしたと直接非難していることになる。これは明らかに18 USC 1030の違反を示してる。物語のどの部分も間違ってる可能性があるけど、アーコの行動がOKだと読むことはできないよ。