テック技報最新号へ →
セキュリティ

RubyGems の extconf.rb からも同系統ワーム:トークン失効の前に常駐を止める

Shai-Hulud/testmetest 系のワームが Ruby では ext/*/extconf.rb から Bun を落として動く。感染疑いでは GitHub トークンを失効する前に net-health-checker/pkg-runtime を止める。失効を先にするとホーム削除のワイパーが走る。

@SocketSecurity · 2026-11-07
#rubygems#supply-chain#worm#extconf#incident-response#ai-agent

いつ使うか

何が分かっているか(strutil-core 1.0.1 の例)

  1. きれいな 1.0.0 の直後に、同じアカウントが悪性の 1.0.1 を出し、extconf.rb がインストール時に Bun を取得して同梱 index.js を実行する(require 不要)。
  2. 認証情報窃取、RubyGems/npm/PyPI への再公開、AI ツールの MCP/SessionStart/AGENTS.md 等への仕込み、署名付き GitHub コミットで指示する Python バックドア(pkg-runtime)がある。
  3. 盗んだ GitHub トークン向けに net-health-checker が常駐し、トークンが 401/403 になると rm -rf ~/ 系を実行する(npm 版と同じ順序の罠)。
  4. C2 例: paleasbest[.]top。関連 PyPI: pystr-codec。公開窓は約 5 時間で RubyGems から削除済みだが、感染後は gem 削除では消えない。

対応

  1. 疑わしいホストは隔離し、次を先に止める・消す: net-health-checker(systemd user/LaunchAgent)、pkg-runtime、~/.config/net-health-checker/token、~/.config/index.js、~/.local/share/runtimes/sync.py。
  2. そのあとで GitHub/GitLab/クラウド/RubyGems/npm/SSH/AI プロバイダ等の認証情報を、きれいな端末からローテーションする。
  3. Gemfile.lock・CI・コンテナに strutil-core がいないか検索。メンテ中 gem に身に覚えのない extensions:/ext/*/extconf.rb が増えていないか見る。
  4. リポジトリとホームから、見知らぬ workspace-tools MCP、SessionStart フック、.github/init.js、勝手な AGENTS.md/CLAUDE.md/.vscode/tasks.json を除去(AI 開発ツール・エディタ設定ファイル経由の永続化をチェックする)。
  5. 狩りの手がかり: /tmp/.b_* から Ruby 経由の bun run、CI 上の sudo python3 による /proc/*/mem 読み、project-utils 説明の新規公開リポ、chore/ci-* ブランチ、AutoSyncComplete/msync-3f7a、偽 CodeQL+scan-output 成果物。extconf.rb SHA-256 c5264f3b9cf2f95c83a70b7dd7430aab8abc262b853dbbcd5386c3a8a9c74769 は当該インジェクタ出力の目安。

追記(2026-11-10):strutil-core(testmetest の RubyGems 版)

  • 文字列処理ライブラリーを装う strutil-core 1.0.1 が、extconf.rb で Bun 1.2.18 を取得してワーム本体を実行し、何もしない Makefile を書いてインストールを正常終了させていた。require しなくても gem install だけで動く。
  • Bun のダウンロード URL を分割しており、URL 全体の静的シグネチャーでは検知できない。送信先は paleasbest[.]top(同じ送信先の PyPI パッケージ pystr-codec もある)。
  • 対応は同じ:導入端末の隔離、GitHub トークン失効の前に常駐サービス net-health-checker と pkg-runtime を止めて消す、Gemfile.lock と CI キャッシュの確認、保守している gem に覚えのない extconf.rb が足されていないかの点検。
  • 出典: @MalwareBibleJP · 2026-11-09

注意

  • --ignore-scripts 相当が無い/弱い Ruby 環境では、ネイティブ拡張の extconf.rb がそのまま install-time 実行になる。新規・急な patch・「文字列ヘルパーなのに巨大な ext」はレビュー対象。
  • 攻撃の再現手順や PoC は書かない。防御は検知・常駐除去・鍵のローテ・依存の棚卸し。

出典

X の元の投稿を開く