
AI Code Reviews | CodeRabbit | Try for Freeの意訳です。
つい先日、Webアプリケーションのデプロイに広く利用されているクラウドプラットフォームであるVercelが、数ヶ月前に始まっていた侵害を公表しました。事の発端は間接的なものでした。Context.aiの従業員が、Robloxスクリプトに偽装されたLumma Stealerを知らずにインストールしてしまったのです。
その後、Context.aiを利用していたVercelの従業員が、この罠に巻き込まれました。攻撃者は盗んだOAuthトークンを通じてVercel従業員のGoogle Workspace認証情報を窃取し、横展開(ラテラルムーブメント)によってVercelの内部システムに侵入しました。これにより、APIキー、トークン、データベース認証情報、署名鍵などが流出しました。Vercelはこれを受けて、「sensitive」とマークされていないすべての環境変数をローテーションし、それらの値は漏洩したものとして扱うよう顧客に勧告しました。
今回のハッキングに対する事後分析では、OAuthのガバナンスやサードパーティSaaSのリスクに焦点が当てられるでしょう。そうした視点は妥当ですが、コード自体のセキュリティに責任を持つセキュリティリーダーにとっては本質を見逃しています。これは開発者サプライチェーン攻撃であり、盗まれた資産がそれを証明しています。
Vercelの侵害から学んだこと、そしてCodeRabbitがどのように対応しているか
お客様は最も価値ある資産であるソースコードをCodeRabbitに託してくださっています。その信頼があるからこそ、セキュリティは後付けではなく、CodeRabbitの設計原則そのものなのです。
教訓1:コードに触れるすべてのツールが攻撃対象領域の一部である
正しい問いは、開発者スタックのコンポーネントが侵害されるかどうかではありません。より適切な問いは、「その地点から攻撃者が与えうる最大の被害は何か」です。

CodeRabbitのコードレビュープラットフォームは、まさにこの問いを中心に構築されています。すべてのコードレビューは、隔離されたエフェメラル(一時的な)サンドボックスで実行され、イベントごとにプロビジョニングされ、完了後に破棄されます。各サンドボックスは、レビュー対象のリポジトリのみにスコープされた、短命のトークンを1つだけ保持します。顧客間で共有される状態はありません。長期間有効な認証情報もありません。内部ネットワークへのアクセスもありません。
サンドボックスはツールが必要とする場合にパブリックインターネットにアクセスできますが、CodeRabbitの内部サービスにはアクセスできません。保存されるコードは顧客ごとの鍵で暗号化されており、CodeRabbitの従業員でさえアクセスできません。
その結果、サンドボックスが侵害されたとしても、ピボット先がありません。永続的なトークンも、横展開の経路もないのです。
もし明日、あなたのサンドボックスやワーカーの1つが侵害されたら、最悪のシナリオはどうなりますか? すべてのエンタープライズが、開発者スタック内のすべてのベンダーに対してこの問いを投げかけるべきです。
教訓2:コード内の長期間有効なシークレットは重大なリスクである
多くのVercelの顧客は、自分が知らないうちに流出していた鍵をローテーションしなければなりませんでした。なぜなら、最も被害が大きい認証情報は、チームが存在を忘れているもの、つまり環境変数に埋もれていたり、ソースファイルに直接ハードコーディングされていたりするものだからです。
コードレビューは、シークレットが永続化する前の最後の実用的なチェックポイントです。認証情報がGitリポジトリにコミットされてしまうと、完全に消去することはできません。フォーク、キャッシュ、CIログ、開発者のマシンにコピーが残り続けます。唯一の確実な防御策は、プルリクエストの段階で検出することです。
CodeRabbitは、パターンマッチングとデータフローを理解するAI駆動のコンテキスト分析を組み合わせて、ハードコーディングされた認証情報をフラグ付けします。パターンマッチングは、sk_live_*、AKIA[A-Z0-9]{16}、ghp_[a-zA-Z0-9]{36}のような形式や、*_SECRET、*_KEY、*_PASSWORDという名前の変数を検出します。
また、Semgrep、Checkov、Brakeman、Betterleaksなどのツールとも統合しており、ワンクリックでの修正をプルリクエスト内に直接表示します。セキュリティチームは.coderabbit.yamlで自然言語によるカスタムチェックを定義し、マージ前のゲートとして適用できます。例えば、データベースDSNをハードコーディングしているファイルのブロックや、read:userより広いOAuthスコープのフラグ付けなどが可能です。
Vercelはその後、新しい環境変数がデフォルトでsensitiveになるようプラットフォームを更新しました。これは正しい方向への一歩ですが、環境変数に格納されたシークレットしかカバーしません。ソースファイル、フィーチャーブランチ、コメント、設定ファイルにハードコーディングされた認証情報は検出できないのです。より堅牢なアプローチは、すべての認証情報をデフォルトでsensitiveとして扱い、本番環境に到達する前のコードレビュー層でそれを強制することです。
教訓3:IDおよびアクセス制御はコードレビュー層にまで拡張されなければならない
Vercelの侵害は、本質的にはID(アイデンティティ)の侵害でした。サードパーティアプリに発行されたOAuthトークンが、攻撃者のアクセス経路となったのです。ワークスペースでOAuthアクセスを持つすべてのツール、長期間有効なGitHubトークンで動作するすべてのCIサービス、モノレポへの読み取りアクセスを持つすべてのAIアシスタント——そのそれぞれが潜在的なエントリーポイントです。
コードレビュープラットフォームには、IDプロバイダーに適用するのと同レベルのID管理の厳格さが求められます。
CodeRabbit Enterpriseでは、以下の機能を提供しています:
- 主要なIDプロバイダーに対応したSSOおよびSAMLサポート(オプションのバイパスではなく強制適用)
- 最小権限の原則を適用するカスタムRBAC
- すべてのプラットフォームアクションと管理変更に対する監査ログ
- コードを自社ネットワーク境界内に留める必要がある組織向けのセルフホストデプロイオプション
- 子会社やM&Aシナリオを含むマルチ組織構造のサポート
- 独立した監査による年次検証済みのSOC 2 Type IIコンプライアンス
- レビュー完了後のデータ保持ゼロ(レビュー終了時にすべてのコードを破棄)
- 調達プロセスの標準的な一環としてのベンダーセキュリティレビュー
目標はシンプルです。たとえ上流で侵害が発生したとしても、コードレビューツールが攻撃チェーンの次のエントリーポイントになることは決してあってはなりません。
開発者ツールを販売するベンダーに対してエンタープライズのセキュリティチームが問うべき質問
Vercelの侵害は、コードベースに触れるすべてのツールを再評価するきっかけとなります。ソースコードへのアクセスを持つすべてのベンダーに、CodeRabbitを含めて、以下の質問をしてください:
- サンドボックスの隔離: イベントごと、顧客ごと、それとも共有ですか?サンドボックスの1つが侵害された場合の最悪のシナリオは何ですか?
- トークンのスコープと有効期間: トークンは短命でリポジトリスコープですか、それとも長期間有効なサービス認証情報ですか?
- 保存時の暗号化: コードは顧客ごとの鍵で暗号化されていますか?自社の従業員が保存された顧客コードを読むことはできますか?
- データ保持: コードはレビュー後に破棄されますか、それとも無期限にキャッシュされますか?
- セルフホストオプション: ソースコードを外部SaaSに送信できない組織は、自社のインフラストラクチャにデプロイできますか?
- SOC 2およびペネトレーションテスト: 最後のサードパーティセキュリティ評価はいつでしたか、そのレポートはNDAの下で入手可能ですか?
- 脆弱性開示プログラム: プログラムはありますか、そして研究者が発見を報告した際にどのように対応しましたか?
- サブプロセッサー: データを扱うサードパーティは何ですか、そのリストは公開されていますか、新しいサブプロセッサーを追加する前にどの程度の通知期間がありますか?
- ID制御: SSOの強制適用、SAML、SCIM、RBAC、SIEMへの監査ログエクスポートを提供していますか?
- 侵害対応: 顧客にどのように通知しますか、どれくらい迅速に行いますか、そして何を開示しますか?
CodeRabbitの回答は、セキュリティアーキテクチャの詳細およびトラストセンターに記載されています。ご質問がございましたら、チームが喜んでお答えいたします。
CodeRabbitにとって、セキュリティは最優先事項です
サプライチェーン攻撃は、主要なターゲットから始まるのではありません。最も弱いリンクから始まります。開発者ワークフロー内のすべてのベンダー、トークン、OAuth grant、またはコードへの読み取りアクセスを持つすべてのツールが、潜在的なエントリーポイントです。Vercelの侵害はVercelから始まったのではありません。Robloxスクリプトから始まったのです。
回答を求めてください。ソースコードを託しているすべてのベンダーは、自社が次のVercelになった場合に何が起こるかを正確に説明できるべきです。



