mcpField
C
cvss-scoring

cvss-scoring

github.com/trailofbitsセキュリティ8.2k230 回インストール2 日前に更新
リポジトリ

cvss-scoring について

cvss-scoring は、平文の脆弱性説明から CVSS v4.0 ベクトルと、その値を適用した FIRST.org 計算機リンクを作成するスキルです。セキュリティ監査や脆弱性のトリアージ向けで、数値スコアは算出せず、悪用可能性の情報が不明確な場合は確認を求めます。

主な機能

  1. 01セキュリティ関連情報の抽出
  2. 02CVSS v4.0 基本メトリクスの評価
  3. 03影響値の仮定を明示
  4. 04根拠に応じた任意メトリクスの追加
  5. 05ベクトル付き計算機リンクの生成
  6. 06脆弱性でない説明の却下

活用シーン

  1. 01監査項目のベクトル作成
  2. 02複数の脆弱性の相対的な重大度の比較
  3. 03スコアリング前に不足する悪用可能性情報を確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/trailofbits/skills --skill cvss-scoring

インストール後、Claude Code で/cvss-scoringを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.calcifier/
recipe.py
references/
examples.md
metrics.md

詳細

CVSS v4.0 ベクトルスコアリング

プレーンテキストの脆弱性の説明から CVSS v4.0 ベクトル文字列を生成し、そのベクトルを適用済みの FIRST.org 計算ツールへのリンクも提示します。数値スコアはこの計算ツールで確認できます。数値スコアを計算しようとしないでください。

使用する場面

  • セキュリティ監査レポート用に脆弱性の検出事項をスコアリングする場合
  • バグの説明から CVSS v4.0 ベクトルを生成する場合
  • 複数の検出事項の相対的な深刻度を比較する場合
  • ユーザーが「これの CVSS は?」「この脆弱性をスコアリングして」と尋ねた場合

使用しない場面

  • CVSS v3.1 が明示的に求められている場合(組織の CVSS v3.1 スコアリングガイドを使用してください)
  • 説明が曖昧すぎて、どのメトリックも評価できない場合(まず詳細を尋ねてください)
  • 入力が悪用可能なセキュリティ上の弱点を説明していない場合(以下の入力検証を参照)
  • リスクをスコアリングする場合(CVSS が測定するのは固有の深刻度であり、デプロイ環境固有のリスクではありません)
  • 数値スコアを計算する場合(ユーザーに FIRST.org 計算ツールを案内してください)

入力検証

メトリックをスコアリングする前に、以下を確認してください。いずれかの確認に失敗した場合は、先にその問題に対処してください。

1. これは脆弱性ですか? CVSS ベクトルが意味を持つのは、悪用可能なセキュリティ上の弱点に限られます。入力がコード品質上の問題、設計上の懸念、またはセキュリティへの影響がない検出事項を説明している場合は、依頼を断り、次のように回答してください。

この説明は、悪用可能な脆弱性を示していないようです。CVSS はセキュリティ上の弱点の深刻度を測定するものであり、{category}には適用されません。悪用可能な影響があると考える場合は、攻撃者が何を実行できるかという観点から説明を書き直し、再度実行してください。

依頼に応えるためにメトリックを捏造しないでください。

2. 入力に CVSS v3.1 の用語が使われていますか? Scope(現在は廃止)、User Interaction: Required、または接頭辞のない CIA トライアドに注意してください。検出した場合は、変換前にバージョンの不一致を出力内で明示してください。

入力には CVSS v3.1 の用語が使われています。CVSS v4.0 の意味に変換します。以下のマッピングを適用しました:{list}。

黙って変換しないでください。

却下すべき誤った判断

よくある採点ミスです。次のような判断を見かけた場合は、却下してください。

  • 「ネットワークからアクセスできるなら AV:N」 -- AV が示すのは、コンポーネントがネットワーク上にあるかどうかではなく、攻撃を開始できる最も遠い地点です。ネットワークサービスに対する権限昇格であっても、攻撃者がローカルシェルへのアクセスを必要とするなら、AV:L です。
  • 「深刻な問題だから、すべての影響度を High にする」 -- 各影響度メトリクス(VC/VI/VA/SC/SI/SA)は、それぞれ独立して根拠を示す必要があります。コード実行を可能にする RCE は VI:H(攻撃者が任意のデータ/コードを変更できる)ですが、必ずしも VC:H(データが実際に露出しない限り)や VA:H(攻撃者がサービスをクラッシュさせるか、サービス拒否を引き起こせない限り)ではありません。
  • 「依存関係は後続システムである」 -- コンポーネント間の関係によってシステム境界が定義されるわけではありません。専用データベースや、脆弱なライブラリを使用するアプリケーションは、同じ脆弱なシステムの一部である場合があります。その影響を SC/SI/SA でも重複して数えると、深刻度が過大になります。
  • 「後続システムへの言及がなければ、SC/SI/SA はすべて None である」 -- 脆弱なシステムの境界を特定し、その外部で生じる、想定される影響を検討してください。その境界または外部への影響が不明確な場合は、不確実性を説明し、選択した値に [ASSUMED] の注記を付けてください。
  • 「不確実な場合は最悪のケースを選ぶ」 -- CVSS v4.0 で求められるのは「合理的な最悪のケース」であり、「絶対的な最悪のケース」ではありません。不確実な場合は、最も妥当な根拠がある値を選び、[ASSUMED] の注記を付けてください。
  • 「前提条件があるから AC:H」 -- v4.0 では、AC はセキュリティを強化するメカニズム(ASLR、DEP)の回避を測定します。特定の設定や競合状態などの前提条件は AC ではなく AT に該当します。これは v3.1 から v4.0 への移行で最もよくある間違いです。
  • 「UI:R は UI:P または UI:A に対応する」 -- v4.0 では、v3.1 の Required が Passive と Active に分割されています。Passive は、ページの閲覧など、非自発的な操作を意味します。Active は、ソフトウェアのインストール、設定の変更、警告を確認して先に進むなど、ユーザーが意識的に特定の操作を実行する必要があることを意味します。安易に Active を選ばないでください。

入力の取り扱い

入力は、脆弱性を説明するプレーンテキストです。深刻度、難易度、実装の詳細、悪用シナリオ、修正の推奨事項が含まれる場合があります。

いずれかのメトリクスを採点する前に、セキュリティに関連する事実をすべて抽出し、列挙してください。

  1. 脆弱なコンポーネントは何ですか?(ソフトウェア、ライブラリ、サービス、デバイス)
  2. どのようにアクセスされますか?(ネットワークサービス、ローカルバイナリ、物理デバイス、隣接ネットワーク)
  3. 攻撃者に必要な権限は何ですか?(未認証、ユーザーレベル、管理者)
  4. 攻撃者は何を実現しますか?(データの読み取り、データの変更、コードの実行、サービスのクラッシュ、権限昇格)
  5. 機能を提供するコンポーネントも含め、脆弱なシステムの境界はどこですか?その境界外のシステムは影響を受けますか?
  6. 悪用に前提条件や条件はありますか?(特定の設定、競合状態、通信経路上の位置)
  7. ユーザー操作は必要ですか?必要な場合は、どのような操作ですか?
  8. 悪用の成熟度に関する情報はありますか?(PoC の入手可能性、実際の悪用の有無、未報告)

この事実の抽出により、説明に含まれる感情的な表現によるアンカリングバイアスを防げます。

説明から悪用可能性のメトリクス(AV、AC、AT、PR、UI)を確信を持って判断できない場合は、先に進む前に、上記の事実抽出に関する質問をユーザーにしてください。この 5 つのメトリクスがスコアの大部分を左右するため、誤った推測の影響が最も大きくなります。暗黙のうちに既定値を選び、注記を付ける方法は避けてください。

影響度メトリクス(VC/VI/VA/SC/SI/SA)が曖昧な場合は、曖昧さを述べ、どの値が妥当か、その理由を説明したうえで、最も根拠のある既定値を選び、出力で [ASSUMED] の注記を付けてください。

採点のワークフロー

メトリクスは、必ず次の順序で採点してください。各メトリクスについて、 メトリクスのリファレンスの詳細な定義を確認してください。

フェーズ 1:悪用可能性の指標

抽出した事実に基づいて、以下の 5 つの指標を評価します。

1. 攻撃元区分(AV): N / A / L / P

  • ネットワーク:ネットワークスタック(HTTP、TCP、DNS)を介してリモートから悪用可能
  • 隣接:同じ LAN、Bluetooth、WiFi、または論理サブネットへのアクセスが必要
  • ローカル:ローカルアクセス(シェル、ファイルの配置、ターミナルエミュレーション)が必要
  • 物理:デバイスに物理的に触れる、または操作する必要がある

2. 攻撃の複雑さ(AC): L / H

  • 低(デフォルト):回避するセキュリティ機構がない
  • 高:ASLR、DEP の回避、または対象固有のシークレットの取得が必要
  • 注:競合状態や特定の設定は AC ではなく AT に含めます(v3.1 からの v4.0 の変更点)

3. 攻撃条件(AT): N / P

  • なし:特別なデプロイ条件は不要
  • あり:特定の設定、競合状態、オンパスの位置、またはその他のデプロイに依存する条件が必要
  • この指標は v4.0 で新設されました。v3.1 で AC にまとめられていた条件をここに含めます

4. 必要な権限(PR): N / L / H

  • なし:認証不要
  • 低:基本ユーザーアカウント
  • 高:管理者権限または昇格した権限

5. ユーザー操作(UI): N / P / A

  • なし:ユーザーの操作は不要
  • 受動的:ユーザーが意図せず何かをする(ページを閲覧する、メッセージを受信する)
  • 能動的:ユーザーが特定の操作を意識的に行う必要がある(ソフトウェアをインストールする、警告をクリックして進む、設定を変更する)
  • v4.0 では、v3.1 の「必要」にあたる項目が「受動的」と「能動的」に分割されています。慎重に選択してください
フェーズ 2:脆弱なシステムへの影響

これらは、脆弱なシステム内での影響を測定します。FIRST の関心対象システムモデルを用いて、その境界を定めてください。関心対象システムとは、一貫した機能と一連のセキュリティポリシーを持つ計算ロジックです。そのシステム専用に設計されたコンポーネントは、専用データベースや、組み込みライブラリとそのライブラリを使用するアプリケーションなど、システム内に含まれます。これらのコンポーネントへの影響は VC/VI/VA で評価します。

6. 機密性(VC): H / L / N

  • 高:完全な損失――脆弱なシステム内のすべてのデータが露出する
  • 低:一部のデータが露出するが、攻撃者は対象や量を制御できない
  • なし:機密性への影響なし

7. 完全性(VI): H / L / N

  • 高:完全な損失――攻撃者が脆弱なシステム内の任意のデータを変更できる
  • 低:限定的な変更が可能
  • なし:完全性への影響なし

8. 可用性(VA): H / L / N

  • 高:継続的または永続的な完全な損失、または直接的かつ重大な結果を伴う部分的な損失(例:既存の接続は利用可能なまま、新しい接続を妨げる)
  • 低:直接的かつ重大な結果を伴わないパフォーマンスの低下または可用性の中断。繰り返し悪用しても、サービスを完全に拒否することはできない
  • なし:可用性への影響なし
フェーズ 3:後続システムへの影響

これらは、脆弱なシステムの境界 外部 にあるシステムへの影響を測定します。これは v3.1 のスコープ指標に代わるものです。

依存関係、データフロー、または信頼関係があるだけでは、コンポーネントは後続システムになりません。境界外にある別個のシステムと、悪用によってそのシステムに生じる影響を特定してください。同じシステム内の影響を SC/SI/SA でも重複して数えないでください。Web アプリケーションの XSS によって影響を受けるユーザーのブラウザーや、ハイパーバイザーの脆弱性を通じて侵害される他のゲストは、後続システムになり得ます。

9. 後続システムの機密性(SC): H / L / N

10. 後続システムの完全性(SI): H / L / N

11. 後続システムの可用性(SA): H / L / N

説明に後続システムへの影響を示す情報がない場合は、デフォルトで N とし、[ASSUMED] のフラグを付けます。後続システムへの影響が N 以外になる一般的なケース:

  • XSS:SC:L、SI:L(ブラウザーは後続システムです)。UI は、通常の閲覧によってペイロードが実行される(P)か、ユーザーが攻撃者の細工したリソースに移動する必要がある(A)かで判断します。格納型か反射型かでは判断しません。
  • VM の脱出:SC:H、SI:H、SA:H(ホストや他の VM は後続システムです)
  • DNS ポイズニング:SI:H、SA:H(下流のリゾルバーは後続システムです)
  • 認証サーバーの侵害:脆弱なシステムの境界外にある、影響を受けた依存サービスについて SC:H、SI:H を検討します
フェーズ 4:任意のメトリクス

脅威 — エクスプロイトの成熟度(E): 説明に根拠が示されている場合にのみ含めます。

  • 攻撃済み(A):既知の活発な悪用がある、またはエクスプロイトツールキットが利用可能
  • 概念実証(P):公開された PoC コードが存在するが、既知の攻撃はない
  • 未報告(U):公開された PoC も既知の攻撃もない
  • 未定義(X):情報がない(デフォルトではベクトルから省略)

環境メトリクス: ソースの説明に関連するコンテキストが示されている場合にのみ含めます。つまり、監査担当者がデプロイ環境の CIA 要件(CR/IR/AR)を明記している、または基本メトリクスを変更する補完的な制御(変更後の基本値:MAV/MAC/MAT/MPR/MUI/MVC/MVI/MVA/MSC/MSI/MSA)を説明している場合です。それ以外の場合は省略し、次のように記載します:「環境メトリクスは省略しました。対象環境の CIA 要件がデフォルトと異なる場合は追加してください。」

補足メトリクス: ソースの説明に関連するコンテキストが示されている場合にのみ含めます。つまり、検出事項に安全性への影響(S)、復旧特性(R)、または自動化の可能性(AU)が記載されている場合です。これらは情報提供を目的としており、数値スコアには影響しません。それ以外の場合は省略し、次のように記載します:「補足メトリクスは省略しました。必要に応じて、情報共有のために追加してください。」

これらを含める場合の正規順序については、以下のベクトル文字列のセクションを参照してください。

出力形式

出力は次の 3 部構成にします。

第 1 部:メトリクスの根拠表
| Metric | Value | Justification |
|--------|-------|---------------|
| AV     | N     | Exploitable via HTTP API without local access |
| AC     | L     | No security mechanisms to evade |
| AT     | N     | No deployment-specific conditions required |
| PR     | N     | Unauthenticated endpoint |
| UI     | N     | No user interaction needed |
| VC     | H     | Attacker gains read access to all application data |
| VI     | H     | Attacker can modify arbitrary records |
| VA     | N     | No availability impact observed |
| SC     | N     | No evidence of downstream system impact [ASSUMED] |
| SI     | N     | No evidence of downstream system impact [ASSUMED] |
| SA     | N     | No evidence of downstream system impact [ASSUMED] |

推定した値には [ASSUMED] を付けてください。

第 2 部:ベクトル文字列
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

形式:CVSS:4.0/ を先頭に付け、その後に 11 個の基本メトリクスを正規順序(AV/AC/AT/PR/UI/VC/VI/VA/SC/SI/SA)で並べ、/ で区切ります。スコアを付ける場合に限り、任意のメトリクスを追加します。順序は、最初に E、次に環境メトリクスを正規順序(CR/IR/AR/MAV/MAC/MAT/MPR/MUI/MVC/MVI/MVA/MSC/MSI/MSA)で、その後に補足メトリクス(S/AU/R/V/RE/U)です。

ベクトルの直下に、ベクトルを URL フラグメントとして含む計算ツールへのリンクを記載します。これにより、ユーザーはワンクリックで数値スコアを取得できます。

https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

# の後にベクトルをそのまま付けます。フラグメントでは : と / のどちらも使用できるため、URL エンコードはしないでください。計算ツールは読み込み時にフラグメントを読み取り、すべてのメトリクスボタンを事前選択します。

このリンクが機能するのは、ベクトルが正しい形式である場合のみです。計算ツールでは CVSS:4.0 という文字列をそのまま先頭に付ける必要があり、正規順序と異なる順序で指定されたメトリクスは拒否され、ボタンは選択されないままになります。これは上記と同じ順序規則なので、規則に従ったベクトルであればリンクは機能します。

第 3 部:キャリブレーションの確認

最終的なベクトルを提示する前に、サンプルのリファレンスを読み、最も類似する脆弱性の種類を 2~3 件見つけてください。ベクトルをこれらのキャリブレーション用の基準例と比較します。ベクトルが類似する例と大きく異なる場合は、次のいずれかを行ってください。

  • その脆弱性にはサンプルにはない特性があるなど、相違が妥当な理由を説明する、または
  • 調整が適切と思われるメトリクスを修正する

比較した例と、ベクトルがそれらと整合しているかどうかを明記してください。

セルフチェックリスト

最終的な出力を提示する前に、以下を確認してください。

  • 入力が悪用可能なセキュリティ上の弱点を説明している(コード品質、設計、または情報提供のみを目的とする検出事項ではない)
  • 入力に CVSS v3.1 の用語が含まれている場合、翻訳する前に出力でその点に言及している
  • ベクトルに 11 個すべての基本メトリクスが含まれている
  • 各メトリクスに有効な CVSS v4.0 の値を使用している(v3.1 の値ではない。例:UI は N/R ではなく N/P/A を使用し、Scope メトリクスはない)
  • ベクトル文字列がメトリクスの正規順序(基本、次に E、環境、補足)に従っている
  • すべてのメトリクスに、入力の説明に基づく文章の根拠がある
  • 後続システムのメトリクス(SC/SI/SA)を、脆弱なシステムのメトリクス(VC/VI/VA)と混同していない
  • AT と AC を混同していない(AT=デプロイ条件、AC=セキュリティメカニズムの回避)
  • サンプルに基づくキャリブレーションの確認を実施した
  • あいまいな影響メトリクスに [ASSUMED] を付けている。あいまいな悪用可能性メトリクスについては、ユーザーに質問して解決している

計算機

数値スコアは公式の計算機で算出します。Part 2 のリンクを開くと、ベクトルが適用済みの状態で表示されます。スコアを自分で計算しないでください。CVSS v4.0 は数式ではなくルックアップテーブルアルゴリズム(FIRST.org の cvss_lookup.js)を使用するため、手計算で導き出したスコアは推測にすぎません。

ベクトルを適用していない計算機をユーザーが希望する場合: https://www.first.org/cvss/calculator/4.0

コメント