powered by TechFeed
表示モード
Deep Dive

AIがバグを直した、でも別の何かを壊していないか — 130件のパッチを再検証して判明したリグレッション問題と、偽陽性を25%削減したOSSツールの設計

10月21日、セキュリティ研究会社のTrail of Bitsが「Your AI agent fixed the bug, but what else did it change?」と題した記事を公開した。AIエージェントが生成したバグ修正パッチを130件以上にわたって再検証した結果、21件のリグレッション(退行バグ)が確認されたという実績をもとに、その防止に向けて開発した2つのOSSプラグインの設計と評価結果を詳述している。

10月21日、セキュリティ研究会社のTrail of Bitsが「Your AI agent fixed the bug, but what else did it change?」と題した記事を公開した。AIエージェントが生成したバグ修正パッチを130件以上にわたって再検証した結果、21件のリグレッション(退行バグ)が確認されたという実績をもとに、その防止に向けて開発した2つのOSSプラグインの設計と評価結果を詳述している。


問題の発端:AIパッチは何かを壊していないか?

AIがバグを修正する速度は上がっている。しかし「修正したはずのパッチが、別の動作を壊していないか」の検証は、いまだ人間の目に依存している部分が大きい。

Trail of BitsはOpenAIとの共同イニシアチブ「Patch the Planet」を通じて、広く使われているOSSへのセキュリティパッチを大量に開発してきた。その過程で9月の報告では、自分たちのパッチがリグレッションを引き起こしていたことも認めている。

その反省をもとに全マージ済みパッチを再レビューした結果、130件超のPRのうち21件のリグレッションが確認された。内訳は機能的リグレッション16件、パフォーマンス1件、ビルド/テスト4件。セキュリティ保護を破ったものはなかった。

検出プロセスでは、エージェントがリグレッション候補を列挙し、PoCで確認後に人間がレビューする流れを採ったが、58件の候補から21件の確認(精度約36%)という結果になった。偽陽性が多く、エンジニアの手作業コストが高い。

この経験から2つの結論が導かれた。パッチを書く標準的な方法が必要であること、そしてリグレッションを検出する標準的な方法とリグレッションの定義ルールが必要であること。この2点を踏まえて開発されたのが、以下に紹介する2つのOSSプラグインだ。


2つのプラグインの中身

regression-hunt:偽陽性を25%削減

regression-huntは、パッチのdiffを起点にリグレッションを検出するプラグインだ。ワークフローは4ステップで構成される。

  1. Enumerate:変更されたコードの呼び出し元をトレースし、実際のインターフェースに到達するリグレッション候補を列挙
  2. Reproduce:ライブデプロイ上でPoCを実行して候補を再現
  3. Replay:新しいコンテキストのエージェントで同じPoCを再実行
  4. Judge:証拠が「リグレッションの要件」を満たすかを判定

このプラグインの核心は2点ある。

リグレッションの厳格な定義:「これはリグレッションではない」ものを明確に排除する。偽陽性・不完全な修正・潜在バグ・既存バグなどをすべて除外した上で、初めてリグレッションと報告する。

脅威モデルの組み込み:THREAT_MODEL.mdが提供されている場合、各エージェントステップにこのドキュメントが渡される。エージェントは結論を出す前に脅威モデルを参照しなければならない。

評価では、21件の確認済みリグレッションを使ってベースラインと比較した。ここでいうベースラインは、「PRをリグレッションの観点でレビューせよ」とプロンプトしただけのCodexエージェント(※後述)を指す。regression-huntは偽陽性を25%削減(95%信頼区間:14〜38%)した。ただしトレードオフとして、一部の既知リグレッションが「証拠不十分」として保留扱いになるケースも生じた。

patching-bugs:数千のエージェントセッションから蒸留したワークフロー

patching-bugsは、Trail of Bitsのエンジニアによる数千のCodexセッションから抽出されたベストプラクティスを実装したプラグインだ。特徴的な点は以下の3つだ。

三腕証明(three-arm proof):同じ再現手順を3つの条件で実行する。元のコードでバグが再現すること、パッチ済みコードでテストが通ること、パッチをリバートすると再びバグが出ることの3条件だ。パッチを取り除いてバグが戻ることを確認することで、「環境変化ではなくパッチ自体が修正した」という強い証拠になる。

不変条件ガイド修正(invariant-guided repair):特定のバグだけでなく、その根底にあるセキュリティ不変条件の違反を修正する。同じバグクラスの亜種にも対応できるパッチを目指す。

regression-huntの強制実行:パッチワークフロー内でregression-huntを必ず実行し、同一の標準パイプラインでリグレッション確認を行う。


Codexエージェントについて

本記事で繰り返し登場する「Codex」は、OpenAIが提供するコーディング特化のAIエージェントを指す。Trail of BitsはPatch the Planetイニシアチブにおいてこのエージェントを活用しており、regression-huntおよびpatching-bugsもCodexエージェントのプラグインとして設計されている。


プロジェクト固有の知識を与えると精度が上がる

両プラグインは、以下の2ファイルをリポジトリに置くことで精度が向上する。

  • **THREAT_MODEL.md**:脆弱性・リグレッションの定義、信頼境界、アクセス制御、有効なバグレポートの条件など
  • PATCHING_GUIDELINES.md(またはAGENTS.md):ビルド・テスト方法、パッチの粒度、変更の提示方法、リグレッションテストに求める内容など

Trail of BitsはGPACでの実装例(PR #3953)を公開しており、liboqsやvalidator.jsでも脅威モデルが公開されている。


今後の開発計画

今後は以下の3点に取り組む予定とされている。

  • patching-bugsの評価基準を構築し、「修正したバグの亜種にも対応できているか・リグレッションを生んでいないか」を計測する
  • エージェントのトレースデータを分析し、どのステップが省略されやすいか・証拠が弱いかを特定する
  • regression-huntのルールを設定可能にし、プロジェクトごとに偽陽性の許容度を調整できるようにする

詳細はYour AI agent fixed the bug, but what else did it change?を参照していただきたい。