ホームへ戻る

AI 安全/程式分析

VICBench、100件の脆弱性が初めて導入されたコミットを追跡――既存の自動手法は最高でもF1 40.1%

VICBenchは、人手とエージェントによる二重追跡を通じて、Python、Java、C++プロジェクトにおける100件のCVEのvulnerability-inducing commitをアノテーションした。ファイルをまたぐコード移動やリファクタリングにより、V-SZZとLLM4SZZでは多数の誤判定が生じ、影響を受けるバージョンに関するデータの信頼性にも問題があることが明らかになった。

Columbia Records · Public domain · Image source
zh-Hant

セキュリティツールは通常、どのコミットが脆弱性を修正したかを把握しているが、その脆弱性が最初にいつコードベースへ入り込んだかを特定できるとは限らない。8月12日に投稿された[VICBench](https://arxiv.org/abs/2608.12246)は、検証済みのvulnerability-inducing commit(VIC)100件を公開した。これらは100件のCVE、88件のオープンソースプロジェクト、Python、Java、C++の3言語、48種類のCWEに対応する。データは[Zenodo](https://zenodo.org/records/18944736)で公開されている。

これは単なる過去のコード履歴の調査ではない。脆弱性を最初に導入したコミットを特定することで、実際に影響を受けるバージョンが決まり、後続のリファクタリングで脆弱なコードが書き換えられる前の状態を使って検出器をテストできる。VICBenchでは、修正コミットによる変更は平均38.6行だった一方、実際の脆弱性導入コミットは平均252.5行に及び、少数の削除行だけを追跡する従来のデータセットを大きく上回った。論文の例では、署名されていないID tokenを受け入れるコードが2018年に別ファイルへ移動されていた。`git blame`だけに依存する手法は、このリファクタリング時点で追跡を停止し、2016年の真の起点を見逃したため、影響を受けるバージョンの期間を約2年分過小評価した。

アノテーションでは、9年のプログラミング経験を持つ著者1名とVIC-Agentが、それぞれ独立して履歴を追跡した。両者は71件で完全に同一のコミットを特定し、Cohen’s κは0.707だった。残る29件は2人目の人間がレビューし、完成したデータセットからさらに11件を抽出して、16年の経験を持つサイバーセキュリティエンジニアが確認した。VIC-Agentは、CVEのセマンティクス、`git blame`、`git log -S`、コミットの検証を組み合わせ、脆弱性の新規導入、コード移動、純粋なリファクタリングを識別する。

ベースライン評価では、V-SZZのF1はJava/C++の40件で33.3%、LLM4SZZは全100件で40.1%だった。VIC-Agentは89.3%に達したが、データセットの構築に関与しているため、独立したテスト結果とはみなせない。また、データセットに含まれるC++の事例は8件だけで、JavaScript、Go、Rustは対象外であり、各CVEには主要な導入コミットが1件存在すると仮定している。エンジニアリングチームは、このデータセットを使ってAIコードレビューや影響バージョン範囲の推定を再評価できるが、次の段階ではブラインドテスト、対応言語の拡充、複数コミットによる因果関係のアノテーションが引き続き必要になる。さらに、[NVD](https://nvd.nist.gov/)のバージョンデータとの照合も求められる。

出典

  1. VICBench: A Multi-Language Benchmark for Code Vulnerability Detection
  2. National Vulnerability Database