TL;DR

REVAは、新規関数に脅威モデル・Semgrep結果・コールグラフなどの文脈を付けてLLMに1回だけ通し、生成テキストではなくコードトークンの内部表現を小型の学習済みプローブでリスクスコア化する脆弱性検出器です。PrimeVulのheld-out testでGLM-5.3-Flashは60.0%精度、約1秒/関数で、同じLLMのVulTriage(59.2%)と同等ながら250倍以上高速・10分の1未満のコストと報告されています。強みは速度とコスト、直接判定より高い精度。制約はLLMの隠れ状態が必要でAPI越しに使えないこと、評価がC/C++のPrimeVulと3つのオープンLLMに限られることです。

既存手法との違い

比較の中心は、同じLLM上で動かしたエージェント型関数レベル検出器のVulTriage(SOTA)とVulAgentです。VulTriageはCWE知識や制御/データフロー事実を検索・言語化して約3回のモデル呼び出しを行い、VulAgentは複数エージェントで仮説検証を行って約9回呼び出します。REVAは文脈をプロンプトに事前搭載し、LLMを1回順伝播して内部表現をプローブで採点するため、呼び出し回数・生成トークン・コストが大幅に小さい設計です。PrimeVul held-out test(Muse-Glimmer-30B、Qwen3.8-27B、GLM-5.3-Flash)で、GLMではREVA 60.0%、VulTriage 59.2%、VulAgent 52.8%。他の2 LLMではREVAが両者より5.1〜6.7ポイント高く、4つの信頼区間が0を除外したと報告されています。時間は0.88〜1.33秒/関数対108〜5,614秒、コストは1,000関数あたり0.9〜1.3ドル対VulTriage 9〜61ドル、VulAgent 63〜307ドルです。VulTrialはGPT-4oの公開値のみで、VulTriageのGPT-4o 63.6%は再現できなかったと明記されています。

使える条件

原論文の評価対象は、PrimeVulのC/C++関数と、Muse-Glimmer-30B・Qwen3.8-27B・GLM-5.3-Flashの3つのオープンウェイトLLMです。各新規関数について、プロジェクト/モジュールの脅威モデル、Semgrep結果、コールグラフ、ファイルのincludes・型・マクロ・兄弟関数などをプロンプトに含めます。脅威モデルは学習関数の84%で利用可能で、ない場合は関数とSemgrep結果のみになります。LLMとSemgrepは起動時に読み込み、脅威モデルは事前構築し、関数ごとに文脈抽出→Semgrep→プロンプト構築→1回順伝播→プローブ採点を行います。LLMの隠れ状態が必要なためセルフホストGPUが前提で、API越しの利用はできません。学習済みラベル付き関数でプローブを訓練する必要があります。他言語、他データセット、クローズドAPI、実運用での遅延、関数間脆弱性への一般化は提示本文からは確認できません。

限界と未検証の範囲

評価はPrimeVulのC/C++関数と3つのオープンLLMに限定され、短い関数ではリポジトリ文脈の寄与は有意でなく、関数単体が多くの信号を持つと報告されています。関数間脆弱性では文脈がより重要になると期待されていますが、未検証です。テスト精度は交差検証より約6ポイント低く(GLM-5.3-Flashで60.0%対66.2%)、時系列分割による新しいコードへのシフトが原因候補とされています。プロジェクトが訓練と評価の両方に出ない設定では交差検証精度が1.3〜2.7ポイント低下します。LLMの隠れ状態が必要でAPIの背後では動かせず、脅威モデルの実運用カバレッジも不明です。出力はリスクスコアであり、脆弱性の証明や説明文を生成するものではありません。VulTriageのGPT-4o 63.6%は再現できなかったと明記されています。本記事は追試や実装を行っていません。

解説

AMI HAPPY

ねえ智也、このブログの「LLMの内部表現を使いコード脆弱性を約1秒で検出するREVA」って、タイトルからしてもうすごそうなんだけど、何がすごいの?

TOMOYA NEUTRAL

ざっくり言うと、コード生成の速さにレビューが追いつかない問題を、LLMの内部表現で1回の順伝播でスクリーニングする話。

AMI SURPRISED

え、LLMに「脆弱性ある?」って聞くのとは違うの?

TOMOYA NEUTRAL

そこが肝。REVAはLLMに判定文を書かせない。関数の周辺文脈をプロンプトに入れて1回通し、コードトークンの隠れ状態を小型プローブが読んでリスクスコアにする。

AMI SURPRISED

プローブって何? 私AI詳しくないんだけど…

TOMOYA NEUTRAL

学習済みの小さな分類器みたいなもの。ここでは0.57Mパラメータのattention probeで、4つの中間層のコードトークン状態をまとめてスコア化する。

AMI HAPPY

なるほど。文脈って具体的に何を入れるの?

TOMOYA NEUTRAL

モジュールの脅威モデル、Semgrepの結果、コールグラフ、ファイルのincludeや型、マクロ、兄弟関数。脅威モデルはプロジェクトごとに事前構築。学習関数の84%で使えて、ない場合は関数とSemgrep結果だけになる。

AMI NEUTRAL

エージェント型の検出器は、そういうのを何回もツール呼び出しして集めるんだっけ?

TOMOYA NEUTRAL

そう。VulTriageは知識検索や制御・データフローの言語化で約3回、VulAgentは複数エージェントで約9回呼ぶ。だから分単位かかる。

AMI HAPPY

REVAはそれを1回の順伝播に押し込んで、しかも生成トークンはゼロなんだ。速そう。

TOMOYA NEUTRAL

評価はPrimeVulのheld-out test、C/C++関数。GLM-5.3-FlashでREVAが60.0%、VulTriageが59.2%、VulAgentが52.8%。

AMI SURPRISED

60%って高くないように聞こえるけど、関数レベルの脆弱性検出ではそんなもの?

TOMOYA NEUTRAL

この論文の比較ではSOTAのVulTriageと同等以上。しかも約1秒/関数で、VulTriageより250倍以上速く、コストは10分の1未満と報告されてる。

AMI HAPPY

他のLLMでも?

TOMOYA NEUTRAL

3つのオープンLLMで試してて、Qwen3.8-27BとMuse-Glimmer-30Bでは両エージェント検出器より5.1〜6.7ポイント高い。同じプロンプトでLLMに直接判定させるよりプローブが14〜17%高い、とも書いてある。

AMI SURPRISED

へえ。じゃあ「LLMの答えより内部の方が情報を持ってる」ってこと?

TOMOYA NEUTRAL

論文の主張はまさにそれ。エージェントが推論で集める情報の多くを、内部表現がすでに持ってる可能性がある。VulTriageよりFPRが低く、ラベル反転も少ない、という報告もその方向。

AMI NEUTRAL

VulTrialは比較に入ってないの?

TOMOYA NEUTRAL

VulTrialはGPT-4oの公開値だけが比較に出てて、同一LLM比較の中心はVulTriageとVulAgent。VulTriageのGPT-4o 63.6%は再現できなかった、と明記されてる。

AMI NEUTRAL

この記事のまとめだと「内部表現が推論の多くを置き換える」って感じだけど、そこは論文の報告と記事の解釈を分けた方がいい?

TOMOYA NEUTRAL

そう。論文で報告されてるのは評価結果まで。そこから「高速スクリーナーとして使える」と読むのは記事側の理解で、追試したわけじゃない、って分けておくのが安全。

AMI SURPRISED

じゃあ弱点も聞きたい。内部表現を使うってことは、API越しじゃ無理なの?

TOMOYA NEUTRAL

そこが大きな制約。隠れ状態が必要だからAPI越しには使えない。セルフホストGPU前提で、ラベル付き関数でプローブを訓練する必要がある。

AMI SURPRISED

評価範囲も限られてる?

TOMOYA NEUTRAL

評価はPrimeVulのC/C++関数と3つのオープンLLMだけ。他言語や他データセット、クローズドAPI、実運用の遅延、関数間脆弱性は提示本文からは確認できない。脅威モデルの実運用カバレッジも不明。

AMI NEUTRAL

短い関数だと周辺文脈の効果は有意じゃなかった、みたいな話もあったね。

TOMOYA NEUTRAL

そう。関数単体が多くの信号を持つと報告されてる。あとテスト精度は交差検証より約6ポイント低い。時系列分割で新しいコードへのシフトが原因候補。

AMI HAPPY

プロジェクトが訓練と評価の両方に出ない設定でも、1.3〜2.7ポイントの低下で済むって話もあったね。

TOMOYA NEUTRAL

そこは汎化の手がかり。でも出力はリスクスコアであって、脆弱性の証明や説明文を生成するものではない。

AMI HAPPY

なるほどね。つまりREVAは「賢い判定者」というより、LLMの内部をのぞく高速スクリーナーって感じか。

TOMOYA NEUTRAL

その理解でいい。あとは、候補をより強いエージェントにエスカレーションする研究課題も最後に挙げられてる。

AMI HAPPY

じゃあ私のコードも1秒で「危険」ってスコア付けしてくれるわけだ。私の生活習慣もそのプローブで見てほしいな。

TOMOYA NEUTRAL

生活習慣はコードトークンじゃないから無理。まずは関数を書こう。