AI生成パッチはセキュリティを悪化させるか?569コミットの静的解析で分かった実態
公開日
セキュリティ
AIアシスタントにバグ修正を依頼し、機能テストが通ればそのままマージする開発スタイルが普及しています。しかし、機能要件を満たしているパッチであっても、修正箇所の周辺に新たなセキュリティ脆弱性が混入していないかという点には注意が必要です。
テキサス大学ダラス校のMuhammad Talha氏とVishwaa Shah氏による研究「To Vibe or Not to Vibe: An Empirical Security Analysis of AI-Generated Code Patches」では、AIエージェントが生成したバグ修正パッチのセキュリティへの影響を静的解析ツールCodeQLを用いて検証しました。本記事では、この研究の分析手法や実験結果、開発現場で参考になる観点について解説します。
研究の概要:3つの状態を比較する差分セキュリティ解析
本研究では、AIが生成したパッチがソフトウェアのセキュリティポスチャーを改善するのか、あるいは悪化させるのかを定量的に評価するため、SNRAと呼ばれる差分解析パイプラインを構築しています。
評価対象には、2024年10月以降のGitHub Issuesで構成され学習データの記憶リスクが低いベンチマーク「SWE-bench Pro」と、AIエージェントの作業ログデータセット「Docent」が用いられました。
実験では、同一の欠陥に対して以下の3つのコードベース状態を作成し、CodeQLを用いて網羅的に静的解析を実施しています。
- Control(修正前ベースライン):問題が存在する元のコミット状態
- Golden(人間の修正):人間のエキスパートが作成した修正パッチを適用した状態
- AI(AIモデルの修正):Claude 4.5およびGPT-5が生成したパッチを適用した状態
解析にはPythonとJavaScriptの4つの実リポジトリ(合計139コミット)が用いられ、脆弱性検出を目的とした「security-extended」と品質全般を対象とした「security-and-quality」の2つのクエリスイートを実行しました。合計1,112回のCodeQL解析を実施し、修正された検出事項と、新たに混入した検出事項の差分およびCVSS base scoreによる重み付けスコアを算出しています。
AI生成パッチはセキュリティ検出を増加させる傾向が確認された
解析の結果、人間のパッチとAIのパッチでは、セキュリティ検出の増減に明確な違いが見られました。
表1:修正前ベースラインに対するセキュリティ検出の差分
| バリアント | 修正された問題数 | 新たに混入した問題数 | 純増減 |
|---|---|---|---|
| Golden(人間) | 142 | 127 | +15 |
| Claude 4.5 | 47 | 100 | -53 |
| GPT-5 | 128 | 242 | -114 |
人間のパッチは142件の問題を修正し、新たに127件混入したため、全体として純増減が+15(改善)となりました。一方、Claude 4.5は-53、GPT-5は-114と、どちらのAIモデルも修正した件数より新たに混入した件数が上回り、コードベース全体のセキュリティ検出数を純増させる結果となりました。
また、パッチ適用によって少なくとも1件以上の新しい問題が混入した割合(回帰率)についても報告されています。人間が作成したパッチでも89.1%のインスタンスで何らかの問題が混入されましたが、Claude 4.5では95.1%、GPT-5では96.7%に達し、AIパッチは人間よりも高い確率で新たな問題を混入させていることが示されました。
モデルごとに異なる脆弱性の混入パターン
混入した問題の内容と深刻度(CVSS)を分析したところ、AIモデルごとにリスクの傾向が異なることが明らかになりました。
表2:CVSS重み付けによる純影響スコア
| バリアント | Net CVSS | 変化した問題の総数 | 変化あたりの平均CVSS (Avg/chg) |
|---|---|---|---|
| Golden(人間) | -4.60 | 269 | -0.02 |
| GPT-5 | -46.80 | 370 | -0.13 |
| Claude 4.5 | -68.60 | 147 | -0.47 |
混入したルールの多くは、循環インポート(py/cyclic-import)や未使用のインポート(py/unused-import)といったコード品質に関するものでした。しかし、深刻度の高い脆弱性パターンにおいてモデル間の違いが見られました。
GPT-5は混入した問題の件数自体は多いものの、変化1件あたりの深刻度影響(Avg/chg)は-0.13にとどまりました。これに対し、Claude 4.5は検出件数こそ少ないものの、Avg/chgは-0.47と最も深刻な悪化を示しました。
この要因として、Claude 4.5は外部からの入力を適切に無害化せずシェルコマンドを構築するコマンドインジェクション脆弱性のルール(py/shell-command-constructed-from-input、CVSS 6.3)を4件混入していた点が挙げられます。この検出内容は修正前のコードや人間のパッチには存在せず、AIが機能修正を行う過程で新たに攻撃面を作り出してしまった例となります。
AIパッチが人間側の見落としを修正する補完的な側面
AIパッチにはセキュリティ悪化のリスクが存在する一方で、人間が見落とした問題をAIが独自に解決していたケースも報告されています。
クロスモデルの重複分析によると、GPT-5は元のコードおよび人間の修正パッチ(Golden)の双方が放置していた脆弱性や品質問題を、独自に83件修正していました。Claude 4.5でも同様の独自修正が2件確認されています。
この結果は、AIモデルが人間のレビュアーが気づきにくい潜在的な問題を検出・修正できる可能性を持っていることを示しています。したがって、AIが生成したパッチを一律に排除するのではなく、AIの強みを活かしながらリスクを制御する設計が有効であると考えられます。
開発フローとコードレビューで考慮すべきポイント
AIが生成したパッチを取り入れる際は、設計やレビュー手順において次の観点が参考になります。
機能レビューだけでなく静的セキュリティ検査を必須化する
機能テストをパスしたAI生成パッチであっても、周辺コードにセキュリティ上の回帰が含まれる割合は95%を超えています。そのため、開発者が目視で機能動作を確認するだけでは不十分であり、CI/CDパイプライン上でCodeQLなどの静的解析ツールを実行し、新たな検出事項の混入をブロックするセキュリティゲートを設けることが推奨されます。
検出件数だけでなくCVSS深刻度で重み付け評価を行う
検出の総数だけでモデルやパッチを評価すると、軽微なインポート警告を多数出したモデルが悪く見え、重大なコマンドインジェクションを少数混入させたモデルが見逃されるリスクがあります。セキュリティ評価においては、ルールごとのCVSSスコアを加味した深刻度ベースの監視を行うことが重要です。
まとめ
本研究では、AIが生成したバグ修正パッチのセキュリティ影響を検証し、以下の点が示されました。
- AIが生成したパッチは95%以上の確率で新たなセキュリティ・品質上の検出事項が混入し、全体としてセキュリティ状態を純悪化させる傾向があった。
- モデルによって混入するリスクの性質が異なり、検出件数が少なくても高深刻度の脆弱性を混入する場合があるため、深刻度に応じた評価が必要である。
- GPT-5が人間パッチの見落とした脆弱性を83件修正したように、AIには人間と補完的な作用もあるため、CI/CDでの自動スキャンと組み合わせた運用が効果的である。
機能要件の達成とセキュリティの担保は独立した課題です。AI支援ツールを開発フローに組み込む際は、自動テストだけでなく静的解析によるセキュリティゲートを併用することが重要となります。
Webサービスや社内のセキュリティにお困りですか? 弊社のサービス は、開発チームが抱える課題を解決し、生産性と幸福度を向上させるためのさまざまなソリューションを提供しています。ぜひお気軽にご相談ください!
参考資料: