关于 performing-cve-prioritization-with-kev-catalog
面向漏洞管理团队的 CVE 优先级评估技能,将 CISA KEV、EPSS、CVSS 与资产和网络因素结合,帮助按风险排序并生成报告。
主要功能
- 01解析 CISA KEV 目录
- 02补充 EPSS 与 CVSS 数据
- 03结合资产重要性和网络暴露度评分
- 04按优先级和时限分类
- 05生成优先级报告
适用场景
- 01将漏洞扫描结果与 KEV 目录比对
- 02制定基于风险的修复顺序
- 03跟踪 KEV 漏洞的修复时限
- 04在 CI/CD 流程中自动化漏洞评估
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-cve-prioritization-with-kev-catalog安装后在 Claude Code 中输入/performing-cve-prioritization-with-kev-catalog确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py详细介绍
使用 KEV 目录执行 CVE 优先级排序
概述
CISA 已知被利用漏洞(KEV)目录依据约束性操作指令(BOD)22-01 建立,是一个持续更新的 CVE 列表,其中的 CVE 已在真实环境中被积极利用,并带来重大风险。截至 2026 年初,该目录包含超过 1,484 个条目,仅在 2025 年就新增 245 个条目,增长 20%。本技能涵盖如何将 KEV 目录与 EPSS(漏洞利用预测评分系统)和 CVSS 一起集成到漏洞优先级排序工作流中,以创建基于风险的方法,优先处理已确认存在利用活动的漏洞,而非仅依据理论严重性。
何时使用
- 在执行涉及使用 KEV 目录进行 CVE 优先级排序的安全评估时
- 在针对相关安全事件遵循事件响应流程时
- 在执行计划内的安全测试或审计活动时
- 在通过动手测试验证安全控制措施时
先决条件
- 可访问漏洞扫描结果(Qualys、Nessus、Rapid7 等)
- 熟悉 CVE 标识符和 NVD
- 理解 CVSS 评分(v3.1 和 v4.0)
- 可访问 CISA KEV、EPSS 和 NVD 端点的 API
- Python 3.8+,并安装 requests 和 pandas 库
核心概念
CISA KEV 目录结构
每个 KEV 条目包含:
- CVE ID:CVE 标识符(例如 CVE-2024-3094)
- 供应商/项目:受影响的供应商和产品名称
- 漏洞名称:漏洞的简短描述
- 添加日期:CISA 将其添加到目录的时间
- 简短描述:简要技术描述
- 所需操作:建议的修复操作
- 截止日期:联邦机构(FCEB)完成修复的截止期限
- 已知勒索软件活动使用:勒索软件组织是否利用该漏洞
BOD 22-01 修复时间线
| CVE 发布日期 | 修复截止期限 |
|---|---|
| 2021 或之后 | 自列入 KEV 起 2 周 |
| 2021 之前 | 自列入 KEV 起 6 个月 |
多因素优先级排序模型
| 因素 | 权重 | 数据源 | 理由 |
|---|---|---|---|
| 已列入 CISA KEV | 30% | CISA KEV JSON feed | 已确认存在积极利用 |
| EPSS 评分 | 25% | FIRST EPSS API | 预测的利用概率 |
| CVSS 基础评分 | 20% | NVD API v2.0 | 漏洞的固有严重性 |
| 资产关键性 | 15% | CMDB/资产清单 | 业务影响背景 |
| 网络暴露 | 10% | 网络架构 | 攻击面可访问性 |
KEV + EPSS 决策矩阵
| 已列入 KEV | EPSS > 0.5 | CVSS >= 9.0 | 优先级 | SLA |
|---|---|---|---|---|
| 是 | 任意 | 任意 | P1-紧急 | 48 小时 |
| 否 | 是 | 是 | P1-紧急 | 48 小时 |
| 否 | 是 | 否 | P2-严重 | 7 天 |
| 否 | 否 | 是 | P2-严重 | 7 天 |
| 否 | 否 | 否(>= 7.0) | P3-高 | 14 天 |
| 否 | 否 | 否(>= 4.0) | P4-中 | 30 天 |
| 否 | 否 | 否(< 4.0) | P5-低 | 90 天 |
工作流
步骤 1:获取并解析 KEV 目录
import requests
import json
from datetime import datetime
KEV_URL = "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"
def fetch_kev_catalog():
"""Download and parse the CISA KEV catalog."""
response = requests.get(KEV_URL, timeout=30)
response.raise_for_status()
data = response.json()
catalog = {}
for vuln in data.get("vulnerabilities", []):
cve_id = vuln["cveID"]
catalog[cve_id] = {
"vendor": vuln.get("vendorProject", ""),
"product": vuln.get("product", ""),
"name": vuln.get("vulnerabilityName", ""),
"date_added": vuln.get("dateAdded", ""),
"description": vuln.get("shortDescription", ""),
"action": vuln.get("requiredAction", ""),
"due_date": vuln.get("dueDate", ""),
"ransomware_use": vuln.get("knownRansomwareCampaignUse", "Unknown"),
}
print(f"[+] Loaded {len(catalog)} CVEs from CISA KEV catalog")
print(f" Catalog version: {data.get('catalogVersion', 'N/A')}")
print(f" Last updated: {data.get('dateReleased', 'N/A')}")
return catalog
kev = fetch_kev_catalog()
步骤 2:使用 EPSS 评分进行丰富
EPSS_API = "https://api.first.org/data/v1/epss"
def get_epss_scores(cve_list):
"""Fetch EPSS scores for a batch of CVEs."""
scores = {}
batch_size = 100
for i in range(0, len(cve_list), batch_size):
batch = cve_list[i:i + batch_size]
cve_param = ",".join(batch)
response = requests.get(EPSS_API, params={"cve": cve_param}, timeout=30)
if response.status_code == 200:
for entry in response.json().get("data", []):
scores[entry["cve"]] = {
"epss": float(entry.get("epss", 0)),
"percentile": float(entry.get("percentile", 0)),
}
return scores
步骤 3:构建优先级排序引擎
import pandas as pd
def prioritize_vulnerabilities(scan_results, kev_catalog, epss_scores):
"""Apply multi-factor prioritization to scan results."""
prioritized = []
for vuln in scan_results:
cve_id = vuln.get("cve_id", "")
cvss_score = float(vuln.get("cvss_score", 0))
asset_criticality = float(vuln.get("asset_criticality", 3))
exposure = float(vuln.get("network_exposure", 3))
in_kev = cve_id in kev_catalog
kev_data = kev_catalog.get(cve_id, {})
epss_data = epss_scores.get(cve_id, {"epss": 0, "percentile": 0})
epss_score = epss_data["epss"]
# Composite risk score calculation
risk_score = (
(1.0 if in_kev else 0.0) * 10 * 0.30 +
epss_score * 10 * 0.25 +
cvss_score * 0.20 +
(asset_criticality / 5.0) * 10 * 0.15 +
(exposure / 5.0) * 10 * 0.10
)
# Assign priority level
if in_kev or (epss_score > 0.5 and cvss_score >= 9.0):
priority = "P1-Emergency"
sla_days = 2
elif epss_score > 0.5 or cvss_score >= 9.0:
priority = "P2-Critical"
sla_days = 7
elif cvss_score >= 7.0:
priority = "P3-High"
sla_days = 14
elif cvss_score >= 4.0:
priority = "P4-Medium"
sla_days = 30
else:
priority = "P5-Low"
sla_days = 90
prioritized.append({
"cve_id": cve_id,
"cvss_score": cvss_score,
"epss_score": round(epss_score, 4),
"epss_percentile": round(epss_data["percentile"], 4),
"in_cisa_kev": in_kev,
"ransomware_use": kev_data.get("ransomware_use", "N/A"),
"kev_due_date": kev_data.get("due_date", "N/A"),
"risk_score": round(risk_score, 2),
"priority": priority,
"sla_days": sla_days,
"asset": vuln.get("asset", ""),
"asset_criticality": asset_criticality,
})
df = pd.DataFrame(prioritized)
df = df.sort_values("risk_score", ascending=False)
return df
步骤 4:生成优先级排序报告
def generate_report(df, output_file="kev_prioritized_report.csv"):
"""Generate summary report from prioritized vulnerabilities."""
print("\n" + "=" * 70)
print("VULNERABILITY PRIORITIZATION REPORT - KEV + EPSS + CVSS")
print("=" * 70)
print(f"\nTotal vulnerabilities analyzed: {len(df)}")
print(f"KEV-listed vulnerabilities: {df['in_cisa_kev'].sum()}")
print(f"Ransomware-associated: {(df['ransomware_use'] == 'Known').sum()}")
print("\nPriority Distribution:")
print(df["priority"].value_counts().to_string())
print("\nTop 15 Highest Risk Vulnerabilities:")
top = df.head(15)[["cve_id", "cvss_score", "epss_score", "in_cisa_kev",
"risk_score", "priority"]]
print(top.to_string(index=False))
df.to_csv(output_file, index=False)
print(f"\n[+] Full report saved to: {output_file}")
最佳实践
- 每天更新 KEV 目录,因为 CISA 每周会多次添加新条目
- 始终将 KEV 与 EPSS 交叉参考;某个 CVE 可能具有较高的 EPSS 但尚未被列入 KEV
- 无论 CVSS 评分如何,将所有列入 KEV 的 CVE 视为 P1-紧急
- 特别关注标记为“已知勒索软件活动使用”的 KEV 条目
- 在 CI/CD 流水线中自动将 KEV 与您的漏洞扫描结果进行比较
- 针对 FCEB 合规要求单独跟踪 KEV 截止日期
- 将 KEV 用作威胁狩猎的领先指标;如果某个 CVE 被添加,请检查您的环境中是否存在先前的利用情况
常见陷阱
- 仅依赖 CVSS 评分,而不检查 KEV 或 EPSS 数据
- 未足够频繁地更新 KEV 目录(CISA 每周多次更新)
- 将非 KEV CVE 视为安全;它们可能已被利用但尚未被编目
- 忽略「勒索软件使用」字段,该字段表示最高紧迫性的威胁
- 仅将 KEV 用于合规,而未将其纳入整体风险管理
相关技能
- prioritizing-vulnerabilities-with-cvss-scoring
- building-vulnerability-data-pipeline-with-api
- implementing-threat-intelligence-scoring
- implementing-vulnerability-remediation-sla
评论
支持 Markdown