api.msrc.microsoft.com の CVRF フィードを毎時スナップショットし、生データを溜める。
狙いは 月が index から消える / 200 で返るのに vuln:Vulnerability が0件 という
一過性欠落を、後から生データで検証できるようにすること。
これらは vuls-data-update の
pkg/fetch/microsoft/cvrf が「その月を全削除」してしまう条件(RemoveAll + 0件をerror扱いしない)で、
vuls-data-raw-microsoft-cvrf の一括削除コミット → 下流 DB の Windows 検知欠落を引き起こす。
.github/workflows/collect.ymlが 毎時scripts/collect.shを実行し、data/をコミット(約1ヶ月運用の想定)。- 毎回、監視対象月のフルの生データを
data/<ts>/に保存(XMLはzstd圧縮)。判定や集計はせず、生データ収集に専念する。
| パス | 内容 |
|---|---|
data/<ts>/index.json |
その時点の /updates 生JSON(~47KB, 可読のため非圧縮) |
data/<ts>/<month>.xml.zst |
各監視月の /cvrf/<month> 生XML(zstd圧縮, 例: 7.9MB→~0.1MB) |
data/<ts>/<month>.http<code>.xml.zst |
非200時のみ(本文があれば証拠として保存) |
<ts>は UTC のYYYYMMDDThhmmssZ。- 1回あたり ~0.55MB(RECENT_MONTHS=6)。毎時×1ヶ月でも git の blob 重複排除により .git は数十〜150MB程度の見込み。
- 復元:
zstd -d data/<ts>/<month>.xml.zst -o out.xml
- このリポジトリを新規作成し中身を置く。
- Settings → Actions → General → Workflow permissions を Read and write に。
- Actions を有効化。
workflow_dispatchで手動テスト実行 →data/にコミットされることを確認。
RECENT_MONTHS(既定6): 監視する最新月数。0で全月。- cron
0 * * * *(毎時): 収集間隔。GitHub の schedule は best-effort で遅延あり。 ZSTD_LEVEL(既定19)。
溜めた data/<ts>/ を時系列で見て、次を確認する:
index.jsonの.value[].IDから 消えた月がないか(各<ts>の月集合の差分)。- 各月 XML の
<vuln:Vulnerability件数が 0 に落ちた瞬間がないか。for f in data/*/2026-Jun.xml.zst; do echo "$f $(zstd -dc "$f" | grep -c '<vuln:Vulnerability')"; done
<month>.http<code>.xml.zstが出ていれば非200が発生していた証拠。