AI の脆弱性巡回は「該当なし」を信用しない作りにする
定期実行の AI に脆弱性情報を巡回させると、一番怖いのは誤判定ではなく、ページが読めていないのに「該当なし」と返る静かな故障。該当なしにも根拠を書かせ、来るはずの更新が来なければ異常とみなす。
いつ使うか
- JVN・KEV・ベンダーの公式ページを AI に定期巡回させ、自社に関係するものだけ報告させたい
- 既にある巡回が「いつも該当なし」で、本当に動いているか分からない
設計の要点(yukino 氏の Zenn 記事より)
- 情報源を 2 層にする。層 1 は KEV・JVN・JPCERT/CC・GitHub Advisory などの広い収集、層 2 は自社で使う製品のベンダー公式ページと資産一覧の照合。層 1 は層 2 の保険で、層 1 にだけ出た CVE は「層 2 未検出」と明示し、層 2 の取得が壊れている兆候として扱う。
- 資産一覧は「Node.js 24.x」のような系列ではなく、適用済みバージョン(24.22.1 など)で持つ。パッチを当てたら必ず更新する。
- 出力の先頭に「ソース健全性」の表を毎回出させる。ソースごとに取得状態と、読み取れた最新版・最終更新日を書かせる。「差分なし」は読めていなくても書けるが、「24.22.1 を読んだ」は読めていないと書けない。
- 定期公開の製品は「来るはずの日に何もない」を異常にする。例: Oracle Java は毎月第 3 火曜(米国時間)なので翌朝に新着がなければ「取得失敗の疑い」。不定期の製品は、最終更新が一定期間より古ければ「要確認」。
- RSS は代替にとどめる。JVN の RSS は新規だけで「更新」を含まないので、主はトップの新着一覧にする。
- 報告メールの件名で「該当あり」「該当なしだがソース異常あり」「該当なし・全ソース正常」を分ける。件名が同じだと誰も開かなくなる。
前回の判定を渡すときの順番
- 定期実行の AI は前回を覚えていないので、未完了の S/A/B 案件だけを外部のシートから渡す。
- 前回のレベルに引きずられないよう、(1) 今回の情報源に新材料があるか書き出す、(2) なければ終了、(3) あれば前回を見ずに再判定、(4) 最後に前回と比べて違えば
[更新]として報告、の順に固定する。 - 適用済みバージョンが修正版以上になったら「クローズ推奨」を出させる。
注意
- 試験では、AI が「取得 OK」と書きながら別のページを読んでいた例もあった。健全性の表も鵜呑みにせず、ときどき人が元ページを見る。
- 時刻で窓を切っても、日付しか持たないソースが多い。重複は報告済みリストで吸収する。
関連
出典
- @yousukezan · 2026-11-07 (yukino「脆弱性トリアージをAIで1日3回自動巡回させる設計」Zenn)