Contents
この記事のゴール
- 要点:CVEは「脆弱性の識別子」、CVSSは「脆弱性の深刻度スコア」。
- ねらい:初心者でも、日々の脆弱性対応でCVEの探し方とCVSSの読み方・優先度付けができるようになる。
- 対応範囲:CVSS v3.1とv4.0の変更点をやさしく整理(NVDはv4を公式サポート)。 NVD+1
まず用語を一枚絵で
- CVE:脆弱性ごとに付く通し番号(例:CVE-2025-12345)。公開情報と一意のIDで“同じ話を同じ名前で”共有する仕組み。 NIST Computer Security Resource CenterCVE
- CVSS:その脆弱性の技術的な深刻度を0.0〜10.0で数値化。リスク(自社環境での影響度合い)そのものではない点に注意。 FIRSTNVD
CVEとは?(仕組みと探し方)
役割
- 公開された脆弱性に一意のID・概要・参照リンクが付く“辞書”。NVDなどのデータベースにフィードされ、横断検索やメトリクス付与の基盤になる。 NIST Computer Security Resource Center
誰が番号を付ける?
- **CNA(CVE Numbering Authority)**と呼ばれる認定組織(ベンダー、CERT、OSS団体など)が割り当て・公開を担う。 CVE+1
どこで調べる?
CVSSとは?(読み方の芯)
なにを表すの?
- 技術的な深刻度を一定のルールでスコア化。Base(脆弱性そのものの性質)を中心に、状況で変わるThreat/TemporalやEnvironmentalで調整して使う。
スコア帯の見方(共通)
- 0.0: None / 0.1–3.9: Low / 4.0–6.9: Medium / 7.0–8.9: High / 9.0–10.0: Critical。 FIRST+1
v3.1 と v4.0 の違いをやさしく
共通の土台(Baseの基本観点)
- 到達性:Attack Vector (AV)、Complexity (AC) など
- 前提条件:Privileges Required (PR)、User Interaction (UI)
- 影響:機密性・完全性・可用性(CIA)
v4.0で増えた/変わったところ
- **Threat(脅威状況)とSupplemental(補足)**が明確化。安全(Safety)や自動化可能性(Automatable)、**ベンダ緊急度(Provider Urgency)**などの補足メトリクスで“文脈”を伝えやすく。 FIRST
- BaseにAttack Requirements (AT)が追加。影響は脆弱なシステム(VC/VI/VA)と後続システム(SC/SI/SA)に分けて評価。ベクタ表記やCVSS-B / CVSS-BT / CVSS-BE / CVSS-BTEの呼称も導入。 FIRST
- NVDがv4.0を公式サポート(2024-06-27発表)。運用で見かける機会が増える。 NVD
初学者メモ:スコア単体は“危険っぽさ”の目安。自社での重要度(そのサーバは本番?外向き?保護は?)を掛け合わせて**“優先度”**に直すのが実務です。 NVD
実務での使い方5ステップ(最短コース)
- CVEを見つける:製品名+バージョンでCVEを検索(CVE.org / NVD)。 CVENVD
- CVSSを読む:
- ベクタ(例:
CVSS:3.1/AV:N/AC:L/...
やCVSS:4.0/AV:N/AC:L/AT:N/...
)の到達性・前提・影響を日本語に置き換える。 FIRST+1
- ベクタ(例:
- 自社文脈で調整:本番/社外公開/代替策有り などをEnvironmental/Threatに反映。
- 優先度に変換:SLA(何日以内に対処)や変更リスクと並べて行先(パッチ/緩和/監視)を決める。
- 記録と共有:CVE-ID、(調整後の)CVSS、対応方針を台帳に残す。
例で理解する(ベクタ→日本語)
例1:CVSS v3.1 ベクタを読む
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- ネットワーク越しに、低複雑度、権限不要、操作不要。影響はCIAすべて高。=即時対応級。 FIRST
例2:CVSS v4.0 の着眼点
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/...
- v3.1相当の読み方に加え、**AT(追加前提の有無)や“後続システム”への波及(SC/SI/SA)**があるかをチェック。 FIRST
よくある誤解と落とし穴
- 誤解:「CVSS=リスク」→違います。CVSSは技術的な深刻度。リスクは“資産の重要度・露出・業務影響”込みで決まる。 NVD
- 誤解:「CriticalだけパッチすればOK」→脅威状況(Exploit有無)や自社の緩和策次第で優先度は上下します。 FIRST
- 落とし穴:ベクタを“数値だけ”で扱う。文字列(ベクタ)を読む習慣をつけると、影響範囲の想像力が上がります。 FIRST
使える小ワザ(現場の最短実装)
1) CVSSベクタを読みやすくするミニスクリプト(TypeScript)
// CVSS v3.1 / v4.0 共通で「キー:値」を取り出すだけの簡易パーサ
const parseCvssVector = (v: string) => {
const [, body] = v.split(/CVSS:\d\.\d\//); // 例: CVSS:3.1/...
if (!body) return {};
return Object.fromEntries(
body.split('/').map(pair => {
const [k, val] = pair.split(':');
return [k, val];
})
);
};
// 使い方
console.log(parseCvssVector("CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H"));
/*
{
AV:"N", AC:"L", AT:"N", PR:"N", UI:"N",
VC:"H", VI:"H", VA:"H"
}
*/
2) “社内優先度”の超シンプル判定(例)
type Ticket = { cve: string; cvssBase: number; isInternetFacing: boolean; isProd: boolean };
const priority = (t: Ticket) => {
let p = t.cvssBase;
if (t.isInternetFacing) p += 1.0; // 外向きは+1
if (t.isProd) p += 1.0; // 本番は+1
return p >= 9 ? "P0: 24h以内" : p >= 7 ? "P1: 3日" : p >= 4 ? "P2: 14日" : "P3: 計画修正";
};
// 例
console.log(priority({ cve: "CVE-2025-12345", cvssBase: 8.1, isInternetFacing: true, isProd: true }));
// => "P0: 24h以内"
実務では「変更の難易度」「メンテナの都合」「ビジネス期日」も入れてカスタムしてください。
まとめ(もう一度ポイント)
- CVEは“共通の識別子”、CVSSは“深刻度の物差し”。
- v4.0でThreat/Supplementalが整い、AT・後続システム影響など文脈が伝わりやすくなった。 FIRST
- 数値だけで意思決定しない。環境要因を重ねて“優先度”に落とすのがプロの使い方。 NVD
参考(一次情報)
- CVEの定義と流通:NIST CSRC / CVE.org。 NIST Computer Security Resource CenterCVE
- CVSS v3.1 仕様:FIRST。 FIRST
- CVSS v4.0 仕様とメトリクス詳細:FIRST。 FIRST
- NVDのCVSS v4.0サポート状況:NVD。 NVD
付録:覚えておくと捗る“略号チート”
- AV: Attack Vector / AC: Attack Complexity / PR: Privileges Required / UI: User Interaction
- VC/VI/VA: Vulnerable Systemの機密性/完全性/可用性への影響
- SC/SI/SA: 後続システムの機密性/完全性/可用性への影響
- AT: Attack Requirements(v4.0) / S, AU, U, R, V, RE: Supplemental(安全、自動化、緊急度、復旧、価値密度、対応工数) FIRST