セキュリティ PR

CVEとCVSSをゼロから理解する:違い・読み方・実務フロー(CVSS v4対応)

CVE/CVSS解説
記事内に商品プロモーションを含む場合があります

この記事のゴール

  • 要点: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

どこで調べる?

  • CVE.org:公式レコードの入口。
  • NVD(nvd.nist.gov):CVEを取り込み、**CVSS(v3.1 / v4.0)**等のメトリクスを付与・検索できる米政府のリポジトリ。 CVENVD

CVSSとは?(読み方の芯)

なにを表すの?

  • 技術的な深刻度を一定のルールでスコア化。Base(脆弱性そのものの性質)を中心に、状況で変わるThreat/TemporalEnvironmentalで調整して使う。
    • v3.1:Base / Temporal / EnvironmentalFIRST
    • v4.0:Base / Threat / Environmental / Supplemental(新設)。 FIRST

スコア帯の見方(共通)

  • 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ステップ(最短コース)

  1. CVEを見つける:製品名+バージョンでCVEを検索(CVE.org / NVD)。 CVENVD
  2. CVSSを読む
    • ベクタ(例:CVSS:3.1/AV:N/AC:L/...CVSS:4.0/AV:N/AC:L/AT:N/...)の到達性・前提・影響を日本語に置き換える。 FIRST+1
  3. 自社文脈で調整:本番/社外公開/代替策有り などをEnvironmental/Threatに反映。
  4. 優先度に変換:SLA(何日以内に対処)や変更リスクと並べて行先(パッチ/緩和/監視)を決める。
  5. 記録と共有: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.0Threat/Supplementalが整い、AT・後続システム影響など文脈が伝わりやすくなった。 FIRST
  • 数値だけで意思決定しない環境要因を重ねて“優先度”に落とすのがプロの使い方。 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