本文へスキップ

CodeRabbit Secure

AIに悪用される前に、セキュリティの脆弱性を見つけて修正

PRからリポジトリ全体まで、コードベースを保護。まずはDeep Scanから。

セキュリティは、すべてのエンジニアの仕事の一部

これまでのツールは、AIを使う攻撃者がいる世界を前提としていません

2018847日
20261日未満

脆弱性の公開から、1日足らずで攻撃手段が登場

攻撃パターンは変化しています

ツールは、未知のリスクを捕捉しなければなりません

AIには、AIで対抗

静的なルールではなく、コードの意味を理解して推論するセキュリティエージェント

攻撃者のように考えるエージェント

ファイル、サービス、信頼境界をまたいで悪用可能な経路をたどり、今までにない脆弱性を見つけ出します。

継続的なセキュリティ監視

すべてのリポジトリ、PRで、セキュリティ脆弱性をほぼリアルタイムで検出して対処します。

検証でノイズを削減

到達可能性、悪用可能性、影響範囲を確認し、本当に対処すべきリスクだけを提示します。

脆弱性を自動で修復

検出した問題の修正案まで作成し、あとはマージするだけです。

仕組み

2通りのスキャン方法

すべてのPRに追従する、継続的なモニタリング

PRスキャン

マージ前に自動でレビューし、PR上にインラインで指摘

Deep Scan

エージェントがコードベース全体をオンデマンド、またはスケジュールで調査

攻撃対象領域を可視化し、文脈とともに捕捉

リアルタイムセキュリティポスチャマップで、自社のリスクをひと目で把握

repository posture
high/criticalmedium検証済み未走査
core78/78
api42/42
auth12/14
workers9/9

エージェント型ツールだから発見できる脆弱性

エージェント型ツールは攻撃対象領域全体を推論し、複雑な脆弱性を検出

api/invoices.tsIllustrative
1router.get('/invoices/:id', async (req, res) => {
2 const invoice = await db.invoices
3 .findById(req.params.id);
4 return res.json(invoice);
5});
6
7
8

アクセス制御 · 高

セッションのユーザーと請求書を結び付ける所有権チェックがありません。ログイン済みであれば誰でも、IDを順に変えるだけですべての請求書を読み取れます。

IDOR

オブジェクト参照を、1つのハンドラー内だけでなくサービスをまたいで検証

agents/support-bot.tsIllustrative
1const reply = await llm.complete(`
2 You are a support agent with tools.
3 Ticket: ${ticket.body}
4`, { tools: [refundTool, lookupTool] });
5
6
7
8

LLMセキュリティ · 重大

チケットの本文が、ツール呼び出し用のプロンプトにそのまま埋め込まれています。細工されたチケットは、別の顧客の注文に対してrefundToolを実行するようエージェントを誘導できます。

プロンプトインジェクション

信頼できないテキストがプロンプトやツール呼び出し、エージェントの判断に影響

checkout/confirm.tsIllustrative
1const total = cart.lockTotal();
2await payments.charge(card, total);
3applyCoupon(order, req.body.coupon);
4await order.confirm();
5
6
7
8

ビジネスロジック · 高

クーポンが、合計金額を請求した後に適用されています。この処理を再送信すると、すでに確定した支払いに対して割引分が払い戻されます。

ロジックの欠陥

そのコードが本来何をすべきかを推論して初めて悪用の経路が可視化

search/query.tsIllustrative
1const sort = sanitizeHtml(req.query.sort);
2const rows = await db.raw(
3 `SELECT * FROM repos ORDER BY ${sort}`
4);
5
6
7
8

データフロー · 重大

入力は1つ上流のファイルで、SQLではなくHTML向けにエスケープされています。ORDER BYの文字列連結はインジェクション可能なままです。

インジェクションの連鎖

汚染された入力が、ヘルパーや各レイヤーをまたいで最終的に到達するクエリまで追跡

preview/image.tsIllustrative
1const { url } = req.body;
2const img = await fetch(url);
3res.type('png').send(await img.buffer());
4
5
6
7
8

サーバーサイド · 高

ユーザーが指定したURLをサーバー側で取得しています。クラウドのメタデータを含む内部エンドポイントに到達できてしまいます。

SSRF

ユーザー入力によって内部通信を操作できてしまう、リクエストの組み立て

wallet/withdraw.tsIllustrative
1const balance = await wallet.balance(user);
2if (balance >= amount) {
3 await wallet.debit(user, amount);
4}
5
6
7
8

並行処理 · 高

残高の確認と引き落としがアトミックではありません。並列に実行された2件の出金がどちらもチェックを通過し、残高がマイナスになります。

競合状態

並列リクエストで、チェックから実行までのわずかな隙に攻撃者が勝ってしまう

ノイズではなく、本当のリスクを検出

すべての検出結果は、あなたに届く前に3つの分析を通過

到達可能性

そもそもそこに到達できるのか。攻撃者が到達できない検出結果は、深刻度を低に抑制

悪用可能性

本当に悪用できるのか。検証パスが、悪用の難易度が極めて高い検出結果を除外

影響範囲

どこまで影響が及ぶのか。エージェントが、悪用された場合の影響と深刻度を明確に提示

世界中の17,000のエンジニアリングチームに信頼されるチームが手がけています。

NVIDIA全体でCodeRabbitを利用しています

Jensen Huang,Founder & CEO,NVIDIA
Watch the NVIDIA customer story in a new tab

よくある質問

あなた自身の コードで 確かめてください。