Ruby向けパッケージ管理「RubyGems」を狙う攻撃「SleeperGem」が発覚、休眠アカウントを乗っ取り開発者PCにバックドアを設置
要点
-
Rubyのパッケージ管理システム「RubyGems」において、開発者のPCを標的とした新たなソフトウェアサプライチェーン攻撃が確認された。
-
攻撃者は長期間更新されていなかった休眠アカウントなどを乗っ取り、開発用パッケージに悪意あるコードを直接仕込んでアップロードしていた。
-
悪意あるコードは一時的なビルドシステム上での実行を検知すると動作を停止し、開発者のローカルPCでのみ動作するよう設計されていた。
-
開発者のPCに侵入すると、外部から不正なファイルをダウンロードし、管理者権限の奪取とプログラムの自動起動の設定を行う。
-
セキュリティ企業は影響を受けたパッケージの即時削除や、システム内の不正ファイルの駆除、認証情報の変更を強く推奨している。
-
Ruby言語向けのパッケージ管理システム(一般にGemと呼ばれるプログラムのまとまりを管理する仕組み)である「RubyGems」において、開発者のPCを標的にバックドア(不正な侵入経路)を設置しようとする新たなソフトウェアサプライチェーン攻撃が進行していることが、2026年7月20日までに明らかになった。セキュリティ企業のStepSecurityおよびAikido Securityの研究者が調査結果を公開し、この一連の攻撃活動は「SleeperGem(スリーパー・ジェム)」と命名された。攻撃者は登録されたパッケージの管理アカウントを乗っ取り、開発者が利用するライブラリを汚染させていたという。
休眠アカウントを悪用した不正パッケージの公開
今回の攻撃では、以下の3つのパッケージにおいて悪意あるバージョンがRubyGems上に公開されたことが確認されている。
git_credential_manager(バージョン 2.8.0、2.8.1、2.8.2、2.8.3)- 2026年7月18日公開Dendreo(バージョン 1.1.3、1.1.4)- 2017年10月14日公開fastlane-plugin-run_tests_firebase_testlab(バージョン 0.3.2)- 2018年2月6日公開
このうち、git_credential_managerはMicrosoftが提供する公式のGit認証管理ツールを装った偽パッケージである。残りの2つは、過去数年間にわたって更新が途絶えていた既存のパッケージであった。Dendreoは2020年10月24日、fastlane-plugin-run_tests_firebase_testlabは2019年3月9日を最後に更新されていなかったが、突然悪意あるアップデートが配信された。
これらの不正なバージョンは、元のプログラムの開発履歴(コミットやタグ)には一切存在しない状態で、RubyGemsの公開サーバー(レジストリ)へ直接アップロードされていた。
依存関係の書き換えによる汚染の拡大
さらに攻撃者は、偽パッケージであるgit_credential_managerを、他の5つのパッケージの「依存関係(あるプログラムを動作させるために他のパッケージを自動で読み込む仕組み)」として登録していた。この中には、先述したDendreoやfastlane-plugin-run_tests_firebase_testlabに加え、slackHtmlToMarkdown、seo_optimizer、array_fast_methodsが含まれている。これにより、これらのパッケージを普段利用している一般の開発者に対しても、自動的に悪意あるコードがダウンロードされる仕組みになっていた。
これらのパッケージのうち、1つを除くすべてが「LR-DEV」という同一のアカウントによって管理されていた。一方で、残りの1つは「pinkroom」という別のアカウントによって管理されている。この事実から、攻撃者が単一のアカウントだけでなく、複数の管理アカウントを不正に乗っ取って悪意ある公開を行った可能性が高いと分析されている。
ビルド環境を回避し開発者PCのみを狙う巧妙な仕組み
SleeperGemの悪意あるコードには、セキュリティ調査や自動テストの目を盗むための工夫が施されていた。パッケージがインストールされると、プログラムは実行環境の「環境変数(OSやシステム全体で設定情報を共有するための変数)」をスキャンする。具体的には、GitHub ActionsやGitLab、CircleCI、Travis、Jenkins、Vercelなど、アプリの自動ビルドやテストを行う環境に関連する約30の変数をチェックする。
もしこれらの環境変数が1つでも検出された場合、プログラムは即座に動作を終了する。これは、使い捨ての自動ビルド環境での実行を回避し、ターゲットである開発者のローカルPC上で実行されている時のみ動作を開始させるための巧妙な隠蔽工作であるとみられている。
二段階のダウンロードと管理者権限の奪取
テスト環境を回避して開発者のPC上で実行された場合、プログラムは外部からのダウンロード処理を開始する。まず、攻撃者が管理する公開Forgejo(Gitをベースにしたコードホスティングサービス)のサーバーから、シェルスクリプト(deploy.sh)と、公式ツールを装ったバイナリ(実行ファイル)の2つのプログラムをダウンロードする。Windows環境では、PowerShellを利用して実行される仕組みになっていた。
不正パッケージのバージョン2.8.2ではダウンロードの準備段階に留まっていたが、バージョン2.8.3では実質的な攻撃フェーズに移行する。ダウンロードされたスクリプトは、バイナリをバックグラウンドで動作する「デーモン(常駐プログラム)」として起動する。
その後、OSの起動時やユーザーのログイン時に自動実行されるよう、cron(指定したスケジュールで自動的にコマンドを実行するツール)の設定やsystemdユーザーサービス(OS上でプログラムの起動や停止などを一元管理する仕組み)として自動起動を設定し、さらにシステム上で管理者権限(sudo)を実行できるグループ(sudoやwheel)の情報を照会する。
もしユーザーがパスワード入力なしで管理者権限を実行できる設定になっていた場合、スクリプトは自らを最高管理者(root)権限で再実行する。そして、ネットワーク監視ツールを装ったパス(/usr/local/sbin/ping6)に、一般ユーザーから実行されても管理者権限で動作するシステムシェルを設置する「setuid root(一時的に最上位の管理者権限で動作させる特別なファイル設定)」を植え付けるという。
推薦される対策と「SleeperGem」の名前の由来
StepSecurityは、該当するパッケージをインストールしたすべてのユーザーに対し、自身のPCおよび保存されているパスワードなどの機密情報はすべて流出したものとして扱うよう警告している。
具体的な対策として、以下の手順が推奨されている:
~/.local/share/gcm/に作成された不正な常駐プログラムを削除する。- cronやsystemdに登録された自動起動の設定を消去する。
/usr/local/sbin/ping6に管理者権限を持つ不正なシェルが設置されていないか確認する。- PCに関連するすべての認証情報や機密データを変更(ローテーション)する。
Aikido Securityの研究員であるチャーリー・エリクセン氏は、「6〜7年もの間、更新が停止していたRubyGemsのアカウントは、一見すると危険性がないように思える。しかし、それこそが乗っ取りを狙う攻撃者にとって格好の的となる。SleeperGemという名前は、長期にわたり休眠(スリープ)状態にあり、無害に見えたアカウントが突然ハイジャックされて牙を剥いたことに由来している」と説明している。
なお、RubyGemsでは本件が公表される約2か月前にも、悪意あるユーザーによって大量の不正パッケージが登録されたことを受けて、新規のアカウント登録が一時的に停止される措置が取られていた。