◎

CVE Enrichment Observatory

CVE メタデータが公開後どの時間軸で充填されるかの縦断観測
English
新規公開された CVE の各種情報(CVSS を発行元別に / CPE / SSVC の各項目 / EPSS / KEV / ベンダー情報 / PoC)が、CVE の公開時刻からどれだけの時間で付いてくるかを観測した 一次データを可視化する。付与までの時間の集計は、公開直後から観測できた CVEだけを 対象にする(本システムが観測を始める前に既に情報が付いていた古い CVE は、正しく時間を 測れないため集計から除く)。

Day 0 の情報空白(公開後 24 / 72 / 168 時間で、まだ無いもの)

公開直後の CVE について、判断に使える情報がその時点でまだ無い割合。対象は公開から 24 時間以内に観測を始められた CVE(初回観測の時点で既に付いていた値は、その時刻までに付いていたと数える。上限の誤差は 24 時間以内)。SSVC のような意思決定フレームワークを Day 0 に回すとき、どの入力が欠けているかを示す。

主な所見(この run の数字から自動生成)

最初に読む要約。下の各節の数字を機械的に文にしたもので、人手の解釈は入れていない。数字は run ごとに更新される。

データ取得の状況(取得済み / 未付与 / 取得失敗)

情報源ごとの取得状況。取得済み=値が取れた、 未付与=取得は成功したが値がまだ付いていない(変化なし)、 取得失敗=エラーで取得できなかった(要改善)。この 3 つを混同せず 分けて記録するのが観測研究の要。大量に問い合わせると取得失敗が増えるため、ここで情報源ごとに 失敗率と状態を監視する。

観測 run の間隔(直近 7 日)

3 時間おきの観測 run が実際にどの間隔で起動したか。GitHub の schedule は 2026-08 下旬から起動が間引かれており、根本対策は Worker からの dispatch(設計書 8.1 節)。空いた時間帯の値は取り返せないため、ここで見えるようにする。

日次ジョブの状況(NVD スナップショット / EUVD / JVN / 検知シグネチャの索引)

1 日 1 回の workflow の成否。最後の成功から 36 時間以内で連続失敗なしなら正常、連続失敗 1〜2 か 36〜72 時間なら劣化、連続失敗 3 以上か 72 時間超なら停止。索引は索引日を成功日として扱う(+24 時間の猶予)。

公開から 0 / 1 / 3 / 7 日でどれだけ情報が揃うか

各情報が、CVE 公開から N 日以内に付いた割合(公開直後から観測できた CVE が対象。Kaplan-Meier 推定で、公開から日が浅く N 日に届いていない CVE と、卒業で追跡が終わった CVE は打ち切りとして扱う)。 SSVC の判断に必要な入力(Exploitation / Automatable / Technical Impact)が公開当日(Day 0)に どれだけ揃うか、CVSS がどの発行元から来るかが一目で分かる。日次の外部データベース(Red Hat VEX、Debian、GHSA、EUVD)は 1 日 1 回の観測で、到着はその日の終わりを上限とし、観測を始めた日に既に載っていた CVE は到着に数えない (到達率は実際の掲載率より低く出る。観測開始から 90 日で揃う)。

公開からの経過時間ごとの付与割合(累積)

横軸は CVE 公開からの経過時間、縦軸はその時間までに情報が付いた CVE の割合 (公開直後から観測できた CVE が対象)。凡例をクリックで表示切替。早く立ち上がる線ほど 公開直後に付く情報。線は到着を初めて見えた観測の時刻で数えた値(下側)、薄い帯は直前の観測の時刻(区間の下端)で数えた値までの幅。真の曲線は帯の中にある。帯は 2026-11-02 より前に登録した CVE では広い(下端が登録時刻になるため)。

待機戦略(公開から何時間待てば、何が揃うか)

研究の問いへの直接の答え。待ち時間ごとに「その時間までに付いていた CVE の割合」(Kaplan-Meier)と 1 段階前からの増分、50 / 80 / 90% に届く時刻、それ以降は増えにくい「待つ価値の上限」。到着は初めて見えた観測の時刻を使うので、割合は下限、時刻は上限。6 時間より短い待ちは観測間隔の分解能(設計 3 時間、実測 6〜8 時間)を下回るので出さない。対象は公開から 24 時間以内に観測を始めた CVE。

いつ公開されたかで待ち時間が変わる(公開時刻と曜日別)

同じ信号でも、CVE が公開された時刻(UTC)と曜日で到着までの時間が変わる。EPSS は 1 日 1 回のモデル更新なので、その境界の直後に公開された CVE は次の更新までほぼ丸 1 日待つ。CISA-ADP の付与は作業時間帯に寄る可能性があるが、時刻や曜日で CNA の構成も違う(定例の一括公開など)ので、そのまま因果とは読めない。観測間隔(実測 6〜8 時間)で時刻の差はなまる。対象は公開から 24 時間以内に観測を始めた CVE。

到着の順序(どれが先に来るか)

2 つの信号が両方付いた CVE について、どちらが先に付いたかと、その差(時間)。CISA-ADP の CVSS と SSVC は同じ vulnrichment の更新で同時に付く、EPSS は日次のモデルで CNA の CVSS から約 1 日遅れる、といった「待つならどれを待つか」の目安。差が 0 は同じ観測 run で初めて見えた(観測の分解能の範囲で同時)。対象は公開から 24 時間以内に観測を始めた CVE。

月別コホートの推移(制度変化と重ねて読む)

CVE の公開月ごとに、公開後 24 時間 / 7 日 / 30 日の時点で付いていた割合(Kaplan-Meier)。制度の変化(NIST のトリアージ移行、CISA BOD 26-04 など)の前後で充填の速さがどう動いたかを見る。対象は公開から 24 時間以内に観測を始めた CVE、200 件以上の月。最近の月は 30 日に届いていない CVE が多く、打ち切りとして扱う(at risk の件数を併記)。

CNA 別の公開時点の完全さ(誰が最初から揃えて出しているか)

割当元 CNA ごとに、公開後 24 時間 / 7 日の時点で CVSS や SSVC が付いていた割合。CNA 自身が CVSS を出すか、CISA-ADP が埋めるか、どこからも来ないかが CNA で大きく違う。対象は公開から 24 時間以内に観測を始めた CVE のうち割当元が分かるもの(割当元の記録は 2026-10 以降)。CISA-ADP の CVSS は CNA が出していない CVE に付くことが多いので「ADP が埋めた」と読む。

CVSS はどこから来るか(発行主体別)

トリアージ移行後、CVSS が CNA / CISA-ADP / NVD のどこからどれだけ来るか。 NVD は本システムの問い合わせ範囲が限られていたため、現在は非表示(注記参照)。

CVE 別の情報付与(公開からの経過時間)

各 CVE に、公開時刻からどれだけの時間で各情報が付いたか(時間/日)。 「開始前に公開」の古い CVE(2022〜2025 等)が混じるのは、それらが最近レコードを更新 されて変更フィードに現れ、追跡対象に入ったため(公開自体は昔なので付与時間の集計からは除外)。

信号の一覧(源、取得の間隔、到着時刻の基準、母集団)

この画面の各信号が、どこから、どの間隔で取られ、到着時刻を何で測っているか。詳細は設計書 4.11 節の信号カタログ。

信号源と取得の間隔到着時刻の基準母集団
CVSS (CNA)cvelistV5 の 1 時間ごとの delta(3 時間おきの run)初めて見えた観測の時刻(上限)。大半は公開時点で付いているため到着時間は出さず、有無だけ全件
CVSS (CISA-ADP)、SSVC 3 点同上(ADP コンテナ)初めて見えた観測の時刻(上限)と直前の観測(下端)全件
CVSS (NVD)、NVD の分析状態NVD cvehistory の差分(3 時間おき)と vulnStatus の日次スナップショットNVD の eventDate(申告)全件(到達割合は伏せる。注記の節)
CPEcvelistV5(CNA と ADP)初めて見えた観測の時刻。有無だけ全件
EPSSFIRST の日次 CSV(run ごとに日付ゲート)初めて見えた観測の時刻(上限)。1 日 1 回のモデル更新全件
KEV 収載CISA の KEV カタログ(3 時間おき)と kev-data の gitdateAdded(申告)と初めて見えた時刻全件
Red Hat VEX 掲載VEX の索引 changes.csv(日次)掲載を観測した日の終わり(上限)台帳の開始(2026-11-02)以降に公開した CVE
Debian トラッカー掲載セキュリティトラッカーの JSON(日次)同上台帳の開始(2026-11-02)以降
GitHub 勧告 (GHSA)Advisory Database の REST(日次、公開日の窓)GitHub の published_at(申告。CVE 公開より前なら 0 時間)レビュー済みの勧告がある CVE(全体の約 5%)
ENISA EUVD 掲載CVE 対応の dump(日次)掲載を観測した日の終わり(上限)台帳の開始(2026-10-19)以降
PSIRT (Red Hat)、PoC (PoC-in-GitHub)CVE ごとの問い合わせ(予算つき)初めて見えた観測の時刻問い合わせ範囲のみ。到達割合は伏せる(注記の節)
検知シグネチャ(TTODS: Greenbone、Notus、ET Open、nuclei、Metasploit、PoC-in-GitHub)索引の日次取得、または git 履歴の再構成(日次)索引で初めて見た日、または初回追加コミットの時刻全件。ダッシュボードではなく派生表(別配布)

方法と注意(評価者向けの要点)

  1. 何を測っているか。CVE そのものではなく、CVE を取り巻くメタデータ(CVSS、CPE、SSVC、EPSS、KEV、勧告、PoC 等)が公開後どの時間軸で付いてくるか。起点 t0 は cvelistV5 の datePublished(発行主体の申告時刻)。
  2. 母集団。cvelistV5 の 1 時間ごとの delta に初出した CVE をコホートに登録し 90 日追跡する。time-to-event の集計は、観測開始が t0 から 72 時間以内の CVE(新鮮コホート)に限る。Day 0 の見出し、待機戦略、到着の順序は 24 時間以内に絞る。公開前の古い CVE が更新で現れたものは除く。
  3. 3 状態の区別。observed(値があった)、absent(取得できたが無かった)、fetch_failed(取得に失敗、有無は不明)を生ログで区別する。absent は打ち切り、fetch_failed は欠測として扱い、混ぜない。
  4. 到着時刻と幅。到着は「初めて値が見えた観測の時刻」(区間の上端)。真の到着はその前の観測(そのときは無かった、下端)との間にある。曲線の実線と表の値は上端で数えた値(下側の推定)、薄い帯と「〜」の右側は下端で数えた値。発行主体の申告時刻(GHSA の published_at、KEV の dateAdded)がある信号はそれを使い、CVE 公開より前なら公開時点で付いていたと数える(規約 R-12)。
  5. 推定量。「N 時間までに付いた割合」は Kaplan-Meier の累積到達 1 − S(t)。打ち切りは追跡の終わり(卒業時刻、無ければ集計時刻)。公開から日が浅く N 時間に届いていない CVE を分母から正しく外す(規約 R-11)。
  6. 観測の分解能。設計は 3 時間おきだが、GitHub の schedule の間引きで実測は 6〜8 時間(「観測 run の間隔」)。この間隔より細かい時刻の差は読めない。待機戦略の表は 6 時間より短い待ちを出さない。
  7. 出していない指標。CNA 由来の CVSS と CPE の到着時間(初回観測で既に付いている CVE が大半)、NVD 由来 CVSS、PSIRT、PoC の到達割合(問い合わせ範囲が狭い)は伏せる。理由は「注記」の節。
  8. データ源とライセンス。cvelistV5、NVD、CISA KEV、FIRST EPSS、ENISA EUVD、JVN iPedia、Red Hat VEX、Debian セキュリティトラッカー、GitHub Advisory Database、Greenbone / ET Open / nuclei / Metasploit / PoC-in-GitHub の索引。すべて公開情報。派生データのライセンスはリポジトリの DATA_LICENSE。
詳細は設計書(docs/design_latest.md)第 6 章と第 13 章、既知の限界は docs/limitations.md。この画面の元データ: data/dashboard.json(run ごとに更新)。
生の観測ログ(一度書いたら変更しない Parquet)から集計。取得済み / 未付与 / 取得失敗を 厳密に区別し、発行元の申告時刻と本システムの取得時刻の両方を保持する。 ·  データ源: cvelistV5 / NVD / CISA KEV / FIRST EPSS / ベンダー CSAF / 公開 PoC(すべて公開情報)。