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/)** [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/ctkrug/cve-radar/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](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)
标签:多模态安全, 安全规则引擎, 数据可视化