概要 JavaScript、 Java、 Pythonの 実際の 脆弱な コードサンプル約150件を 対象に、 主要モデルが 安全性と 機能性を 両立した 脆弱性修正を どれだけ 生成できるかを ベンチマークしました。 各モデルを 単独で 実行した 場合と、 Snyk Intelligence (新しい エージェント型Agent Fixアーキテクチャ)を 利用した 場合を 比較しました。 主な 結果は 次の とおりです。
最先端モデルは、 追加機能なしでは 72~75%に 集中します。 Gemini 3.1 Pro、 Claude Sonnet 4.6、 Claude Opus 4.6は、 いずれも 数ポイントの 範囲に 収まります。 安全性と 機能性を 両立する 修正では、 モデルを 選んでも 数値は ほとんど 変わりません。
Snyk Intelligenceを 使うと、 同じ モデルが この 水準を 超えます。 Opus 4.6は 74.6%から 85.4% に 上昇し、 10.8ポイント改善しました (修正 できた サンプルが 14.48% 増加)。 差を 生むのは モデルではなく、 セキュリティコンテキストです。
モデルが 最も 苦手と する 領域で、 改善幅が 最大に なります。 Opus単独では Pythonサンプルの 64%しか 修正できませんが、 Snyk Intelligenceを 使うと 88%に 達します。
はじめに コーディングエージェントの ベンチマークには、 ユニットテスト生成、 SWE-bench形式の バグ修正、 コード補完などが あります。 しかし、 セキュリティチームが 実際に 重視する タスク、 つまり 既知の 脆弱性を 含む コードから、 脆弱性を 取り除き、 な おかつ コードが 動作し続ける 修正を 作る タスクに ついて、 広く 使われている 公開ベンチマークは ありません。 この 2つは 独立した 基準です。 一方を 満たして もう 一方に 失敗するのは、 よく ある うえに コストの かかる 失敗です。 SQLインジェクションを 取り除いても クエリの 返す 内容が 変わってしまえば、 何の 役にも 立ちません。 見た目は 適切な 修正でも、 インジェクションが 残っていれば、 解決策のように 見えるだけに さらに 厄介です。
そこで 私たちは、 各修正に ついて 2つの 基準を 両方評価する ベンチマークを 構築し、 最先端モデルを 2通りで 実行しました。 単独で 実行する 場合と、 Snykの セキュリティインテリジェンス を 利用する 場合です。 私たちが 知りたかったのは、 端的に 言えば、 Snykの セキュリティコンテキストに よって 最先端モデルの 修正能力が どれだけ 変わり、 どの 領域で 変化するのか、と いう ことです。
要点を 先に 述べると、 追加機能なしの モデルは 72~75%付近で 頭打ちに なっており、 Snyk Intelligenceが その 壁を 超える 力に なります。 この 記事では、 その 根拠と なる データと 手法を 紹介します。
測定方法:Golden Testベンチマーク 一般的な コードベンチマークでは、 コードが 実行できるか 、 または バグ報告を 解決できるか を 確認します。 セキュリティ修正では、 セキュリティと 機能の 両方の 基準を 同時に 満たす 必要が あり、 どちらも 十分ではありません。 私たちの 評価セットである Golden Testsは、 両方を 測定できるように 設計されています。 SWE-bench に 着想を 得て、 セキュリティ向けに 調整しました。
評価サンプル この セットは、 実際の 脆弱な コードサンプル約150件で 構成されています。 内訳は Pythonが 50件、 JavaScriptが 54件、 Javaが 39件です。 各サンプルは 脆弱性を 1つだけ 含む コードで、 Snyk Code が 検出し、 人間の セキュリティ専門家が 確認しています。 また、 モデルに 不足した 外部コンテキストを 与えなくても、 提示された コードだけで 修正できる ものを 選びました。
評価方法 各サンプルには、 人間が 検証した 2つの ユニットテストが 用意されています。
合格と 評価されるには、 モデルは 両方の テストを 最初の 試行で 、いずれの テストも 一度も 見ずに 成功させる コード修正を 行う 必要が あります。 モデルは ユニットテストそのものを 見ないため、 合格は 既知の テストに 合わせた 出力ではなく、 安全性と 機能性を 真に 両立した 修正を 示します。
SQLインジェクションが ある Pythonの サンプルを 例に しましょう。 この コードは ユーザー入力を 連結して クエリを 組み立てます。 セキュリティテストでは SQLインジェクション の ペイロードを 送り、 データベースから 全行が 漏えいしない ことを 確認します。 脆弱な コードは この テストに 失敗します。 機能テストでは 通常の ユーザー名を 送り、 正しい レコードが 返る ことを 確認します。 元の コードは この テストに 成功します。 モデルの 書き換えが、 テストを 見ていない 状態で、 最初の 試行から セキュリティテストに 合格し、 機能テストも 成功させた 場合にのみ 修正と して カウントされます。
評価対象 評価した 構成は 6つです。 Snykの 従来の 社内StarCoderベースAgent Fixモデル、 追加機能なしの 最先端モデル3種 (Gemini 3.1 Pro、 Claude Sonnet 4.6、 Claude Opus 4.6)、そして 新しい エージェント型 Agent Fix アーキテクチャで Snyk Intelligenceを 利用する Sonnet 4.6と Opus 4.6です。 ここで いう 「Snyk Intelligence」とは、 動的な Few-shotプロンプティングを 指します。 修正時に、 Snykの 脆弱性データベースに ある 35,000件以上の 脆弱性 から、 対象の 弱点に 最も 関連する 専門家作成の 修正例を 挿入します。 (この 手法は、 同じ アイデアで 既製の LLMの 性能を 向上させた 先行研究を 発展させた ものです。 )
Snyk Agent Fixベンチマークは、従来のベンチマークとどう違うのでしょうか? Golden Testセットは、 コードに 対する AI評価の 基準を 着実に 引き上げてきた 研究の 流れを 受け継いでいます。 SWE-bench は、 モデルの 自己申告に よる 妥当性ではなく、 実際の 非公開テストを 使って 評価する 方法を 確立しました。 セキュリティ分野では、 Vul4J が 再現可能な 脆弱性と、 その 存在を 証明する テストおよび機能的な 回帰テストを 組み合わせました。 これは、 失敗から 成功への 変化と、 成功を 維持する ことの 両方を 評価する 私たちの 設計に 最も 近い 先例です。 BaxBench や SEC-bench などの 近年の 研究も、 私たちが 前提と する 考えを 裏付けています。 機能的に 正しい コードでも、 依然と して 安全でない ことは 珍しく ありません。 その ため、 信頼できる 修正ベンチマークでは 両方の 特性を 同時に 評価する 必要が あります。 Golden Testセットの 特徴は、 3つの 本番用 プログラミング言語を 対象に、 人間が 検証した 実際の サンプルを 使い、 テストを モデルに 見せずに 両方の 基準で 評価する 点です。
結果 主な 指標は、 修正が 安全性と 機能性の 両方を 満たした Golden Testsの 割合です。
StarCoder (従来の Agent Fixモデル)
Claude Sonnet 4.6 + Snyk Intelligence
Claude Opus 4.6 + Snyk Intelligence
グラフ1:機能性と 安全性を 両立した 修正率
追加機能なしの モデルは 3ポイントの 範囲に 収まっています。 同じ モデルに Snyk Intelligenceを 加えると、 8~11ポイントの 差が 生まれます。 Opus 4.6は 74.6%から 85.4%に 上昇します。
Opusの 結果を 言語別に 見ると、 改善は 平均値だけの ものではないことが わかります。 テストした すべての 言語で 効果が あり、 追加機能なしの モデルが 最も 苦手と する 領域で 最大の 改善が 見られます。
グラフ2:言語別の 改善幅
最も 顕著なのは Pythonです。 Opus単独では サンプルの 64.0%を 修正できましたが、 Snyk Intelligenceを 使うと 88.0%に 上昇します。 Opusが もともと 高い 性能を 示した JavaScriptと Javaでも、 それぞれ 5~6ポイント改善しました。
数値が示すこと 安全性と機能性を両立する修正では、モデルの規模を大きくしても性能は頭打ち 追加機能なしの 3モデルは 72.4%から 74.6%の 範囲で、 2社の モデル間の 差は 2.2ポイントでした。 この タスクで モデルの 大型化や 新しさが 決め手に なるなら、 この 結果にも 差が 表れるはずです。 しかし、 そうは なりません。 この タスクの 難しさは、 より 汎用的な 能力を 高めても 直接 解決しません。 モデルには、 もっと もらしい コードを 書くだけでなく、 この 弱点を 安全に 修正する 方法を 知る 必要が あるのです。
決め手となるのは、より大きなモデルではなくセキュリティコンテキスト 同じ Opus 4.6が、 修正時に 注入する セキュリティ関連の 例だけで 10.8ポイント (サンプル数で 14.48%) 改善しました。 この 手法は モデルに 依存しないため、 基盤と なる 最先端モデルの 性能向上は、 この コンテキストと 競合するのではなく、 相乗効果を 生みます。 長期的な 価値を 持つ 資産は、 専門家が 作成した 35,000件以上の 修正例です。 モデルは 業界の 進歩に 合わせて 交換できる 構成要素であり、 その ため 現在の 本番環境の Agent Fixでは、 Snyk Intelligenceと Claude Opus 4.7を 組み合わせています。
モデルが最も苦手とする領域で、改善幅が最大 Opus単独では、 最も 苦手な Pythonサンプルの 64%しか 修正できませんでした。 Snyk Intelligenceを 使うと 88%に 達し、 3言語の 中で 最も 大きな 改善と なりました。 セキュリティコンテキストは 平均値を 上げるだけでなく、 最低水準を 引き上げます。
追加検証でも結果を確認 Opusと Snykを 組み合わせた 数値は、 2回の 実行結果 (84.6%と 86.0%)の 平均です。 その ため、 主要数値の 85.4%は、 実行を またいだ安定した 性能を 示しています。 この セットでの 実行ごとの 変動は およそ1ポイントです。 構成間の 差が 1~2ポイントの 場合は、 その 点を 考慮する 必要が あります。
次回予告:Snyk VulnBenchとコーディングエージェントによる脆弱性検出 脆弱性を 修正するには、 まず 発見しなければなりません。 202 6年6月、 私たちは Snyk VulnBench JS 1.0の 論文 を 公開しました。 この 論文では、 まず コード内の 脆弱性を 検出する うえで、 決定論的かつ 高速な SASTエンジンである Snyk Codeと、 コーディングエージェント (Claude Codeの ハーネス)を 活用する LLMを 比較し、 ベンチマークする ことを 目指しました。
Snyk VulnBenchの 調査結果 から、 Claude Opus 4.7の 最大推論レベル (いわゆる max )のような 最先端の 大規模言語モデルでも、 高度な コーディングエージェントハーネス ( Claude Code そのもの)を 利用した 場合で さえ、 再現性と 決定性に 課題が ある ことが わかりました。 主な 結果は 次の とおりです。
ある ケースでは、 モデルと コーディングエージェントが 報告した 結果の 約50%が、 その後の 5回の 実行の うち 4回で 再現されず、 エージェント型開発者や AIセキュリティエンジニアに 誤検知の バックログと 脆弱性疲れを もたらしました。
別の ケースでは、 コーディングエージェントの 13%が、 対応する ものが ない 脆弱性を 5回すべての 実行で 報告しました。 その 結果、 セキュリティ上の 課題の バックログには 誤検知の 可能性が ある 項目が 増え、 さらに 混乱や 認知的負荷が 生じます。
Snyk VulnBenchの データセットを ぜひ ご覧ください。 レビュー用に オンラインで 公開しています。 https://vulnbench.com/
制約事項 この 結果を 参考に する 前に、 読者が 考慮すべき 制約は 4つあります。
サンプル数: 約150件 (Python 50件、 JavaScript 54件、 Java 39件) で 明確な 傾向は 確認できますが、 小さな 差の 統計的 有意性を 主張するには 十分ではありません。 StarCoderの ベースラインは、 約20%少ない サンプルで 実行しました (学習データが 存在する Agent Fix対応ルールのみ)。 全ルールを 対象とした 場合の スコアは 54.9%です。 これは Snyk社内の ファインチューニング済みモデルであり、 最先端モデルの ベースラインではなく、 参考値と して 掲載しています。
アプリケーション全体ではなく、 コードスニペット単位: 各サンプルは 脆弱性を 1つ 含む 単 一ファイルで、 ローカルの コンテキストだけで 修正できます。 実際の コードベースには ファイルを またぐ コンテキストや、 相互に 影響する 複数の 問題が ありますが、 この ベンチマークでは 評価していません。
対象 言語は 3つ: JavaScript、 Java、 Pythonを ベンチマークしました。 新しい アーキテクチャは Snyk Codeが サポートする すべての 言語に 対応していますが、 現在 Golden Testが 用意されているのは この 3言語です。
変動を 評価する 実行回数が 限定的: Snykで 強化した 構成は 2回の 実行結果を 集計しました。 各項目に ついて 正式な 誤差範囲を 示すには、 反復回数が 不足しています。 2ポイント未満の 差は 概算と してお考えください。
これらの 制約を 明記するのは、 結果を 否定する ためではなく、 どの 主張を どの 程度 参考に すべきか 判断できるように する ためです。 Snyk Intelligenceに よる 10ポイント超の 差は 実行ごとの ばら つきを 大きく 上回りますが、 小さな 差の 言語別の 順位は そうではありません。
今後の展望 対応言語の 拡大: Golden Testセットを JavaScript、 Java、 Python以外にも 拡大し、 ベンチマークを アーキテクチャの 全言語対応に 合わせます。
変動の 定量化: 各構成を 十分な 回数実行し、 2回の 平均ではなく 適切な 誤差範囲を 公表します。
修正だけでなく 検出も 評価: この ベンチマークは 修正を 評価します。 別の 取り組みでは、 エージェントが Snyk Codeと 比べて どれだけ 脆弱性を 発見 できるかを 測定しており、 その 結果は 別途報告します。
新しい エージェント型Agent Fixの 展開が 始まり、 Snyk Intelligenceと Claude Opus 4.7を 組み合わせています。 皆さんの コードで、 安全性と 機能性を 両立した 修正を 試してみませんか? Snyk Codeと Agent Fixを 始めて、 これらの 数値を 生み出した エンジニアリングに ついて 詳しく 知る 。
Play Video: Can You Trust AI Code? I Built a Scanner to Find Out
AIが 書いた コードは 信頼できる? 確かめる ために スキャナーを 作ってみた
付録:方法論と集計 評価方 法: 各ゴールデンテストは、 脆弱性を 1つだけ 含む コードサンプルと、 セキュリティユニットテスト (脆弱な コードでは 失敗) および機能ユニットテスト (元の コードでは 成功)で 構成されます。 テストを モデルに 見せず、 最初の 試行で 修正が 両方の テストに 合格した 場合にのみ、 その 設定で サンプルを 修正できたと 判定します。
集計方 法: 報告される 修正率は、 修正できた サンプルの 割合です。
以前の モデル (StarCoder)の 72.4%と いう 数値は、 言語ごとの 修正率の 平均であり、 Agent Fixが サポートする ルールのみを 対象と しています。 すべての ルールを 対象に すると、 54.9%に 低下します。
Opus 4.6 + Snyk Intelligenceの 85.4%と いう 数値は、 複数回の 実行に おける 平均です (1回目 = 86.0%、 2回目 = 84.6%)。 2つ目の グラフに 示す 言語ごとの 数値は、 代表的な 1回の 実行に よる もので、 複数回の 実行を 集計した 数値より 平均が わずかに 高くなっています (約86%)。 引用する 際は、 複数回の 実行を 集計した 数値を 使用してください。
設定: StarCoder (以前の Agent Fixモデル)、 Gemini 3.1 Pro、 Claude Sonnet 4.6、 Claude Opus 4.6を 使用。 それぞれ、 エージェント型の Agent Fixアーキテクチャで、 標準状態の 場合と Snyk Intelligenceを 使用した 場合を 比較しました。 ここでの データは Opus 4.6で 収集しましたが、 本番環境の Agent Fixは その後 Claude Opus 4.7に 移行しています。 Snyk Intelligenceは、 生成時に 特定の 弱点に 対する 専門家作成の 修正例を 組み込みます (動的な few-shotプロンプティング)。
Snykの 実力を ぜひ ご覧ください 開発者と セキュリティチームの 双方に Snykが 選ばれる 理由と、 チームに どのような 価値を もたらすのかを ご確認ください。