ctkrug/cve-radar
GitHub: ctkrug/cve-radar
将 NVD 最新 CVE 数据转化为带有通俗风险描述的静态仪表板,帮助工程师快速筛选和理解新披露的漏洞。
Stars: 0 | Forks: 0
# CVE Radar
**▶ 在线演示:[apps.charliekrug.com/cve-radar](https://apps.charliekrug.com/cve-radar/)**
[](https://github.com/ctkrug/cve-radar/actions/workflows/ci.yml)
[](LICENSE)
**每一个新 CVE,都用通俗易懂的英语呈现。** CVE Radar 将原始的国家
漏洞数据库 (NVD) 订阅源转化为一个快速、可过滤的公告板,在这里每个
漏洞都被解码成一句可读的句子,让你能一眼区分出远程、无需交互且影响极大的漏洞,
与本地、低严重性的漏洞。
它是为那些经常被问到“我们受此影响吗?”并且必须在没有专职威胁情报分析师的情况下
快速找到答案的工程师和小型团队管理员构建的。
无需账号,无需后端,浏览器中也无需 API 密钥。其构建成果是一个静态网站,
你可以托管在任何地方。
## 它的核心功能
NVD 具有权威性但难以快速浏览:嵌套的 JSON、四种不同的 CVSS
版本(v2 / v3.0 / v3.1 / v4.0)、稀疏的 CPE 产品数据,以及为工具而非人类编写的描述。每一个缺陷都附带一个 CVSS 向量,这是一串像 `AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H` 一样的紧凑字符串,
编码了漏洞是如何被触达的以及它会让你付出什么代价。精确无误,但一眼看去难以理解。
CVE Radar 会确定性地将该向量解码为一句话:
没有使用语言模型,也没有网络调用,因此同一个向量总是生成
相同的句子,静态构建也保持可复现。
## 它的具体工作
- **摄入。** 从 NVD REST API (2.0) 拉取最近的 CVE,内置了
示例数据夹具(fixture),以便构建可以离线运行并保持 CI 状态为绿色(通过)。
- **标准化。** 无论使用何种 CVSS 版本,将每条记录扁平化为统一的 schema;选取
最佳可用严重性;从 CPE 匹配数据、CWE 弱点类别和参考链接中提取受影响的供应商和
产品。
- **解释。** 将 CVSS 向量解码为一句通俗易懂的风险描述。
- **构建。** 渲染一个自包含的静态仪表板(`site/`),支持
按严重性、供应商和产品进行客户端过滤,全文搜索
(包括 CWE),排序,每张卡片上的 CWE 标签,CVSS 分数仪表盘,返回
NVD 公告的链接,以及用于任何过滤视图的共享深度链接 URL。该
页面在 390 / 768 / 1440 px 下具有响应式设计,并遵循 `prefers-reduced-motion` 设置。
## 示例输出
每个 CVE 都渲染为一张卡片,以其通俗英语描述开头:
```
CVE-2024-3400 [CRITICAL] 9.8 3.1
################################____ 9.8 / 10
Exploitable over the network with no privileges or user interaction;
full loss of confidentiality, integrity, and availability.
Command injection in the GlobalProtect feature of PAN-OS...
CVSS:3.1/AV:N/AC:L/... CWE-77 · Command Injection paloaltonetworks 2 months ago
```
## 技术栈
- **Python 3.11+**,核心部分仅使用标准库(`urllib`、`json`),没有
繁重的依赖。
- 静态前端:手写的 HTML/CSS/原生 JS,无框架,使用相对
资源路径,因此可以在任何 base path 下托管。
- 工具:使用 `pytest` 进行测试,使用 `ruff` 进行 lint,使用 GitHub Actions 作为 CI。
## 快速开始
```
# 安装(可编辑,包含 dev tooling)
pip install -e ".[dev]"
# 从 bundled sample feed 构建 dashboard(离线)
cve-radar build --sample --out dist
# 或从 NVD 拉取最新的 CVE(过去 7 天)
cve-radar build --days 7 --out dist
# 打开 result
open dist/index.html
```
构建会写入一个单一的自包含目录(默认为 `dist/`)。将静态托管指向
它,这就完成了整个部署。
## 项目布局
```
cve_radar/ # the pipeline: fetch -> normalize -> blurb -> build
fetch.py # NVD REST client (+ offline sample loader)
normalize.py # messy NVD record -> clean Cve schema
blurb.py # CVSS vector -> plain-English risk sentence
cwe.py # CWE id -> human weakness name
build.py # render the static dashboard
cli.py # `cve-radar` entrypoint
data/ # bundled sample feed for offline builds
site/ # frontend template baked by build.py
index.html # the dashboard · landing.html = branded intro
styles.css # DESIGN.md tokens + responsive/a11y rules
app.js # client-side filter/search/sort (vanilla IIFE)
tests/ # pytest suite
docs/ # VISION, BACKLOG, DESIGN, ARCHITECTURE
```
请参阅 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) 获取完整的模块映射和
数据流。
## 测试
```
pytest -q # the suite
pytest --cov=cve_radar -q # with coverage
ruff check . # lint
```
核心逻辑的行覆盖率达到 99%;`normalize.py`(负责处理混乱的实时数据流的
那一层)被完全覆盖,并使用 Hypothesis 进行了 fuzz 测试,因此格式不良的
记录会优雅降级,而不会导致批处理崩溃。
## 许可证
MIT,详见 [`LICENSE`](LICENSE)。
查看更多 Charlie 的项目 → [apps.charliekrug.com](https://apps.charliekrug.com)
标签:多模态安全, 安全规则引擎, 数据可视化