Fazmin/cve-intel · 上手攻略

  • 仓库:Fazmin/cve-intel
  • 链接:https://github.com/Fazmin/cve-intel
  • 分类:agent / risk(安全情报 · CVE 分诊)
  • 作者:spark
  • 更新:2026-10-24

一、它是什么

CVE Intel 是一个 本地运行的漏洞分诊(triage)桌面应用,用 原生 Rust + Tauri 2 写成。核心卖点是:桌面 GUI、CLI、REST API、MCP server 是同一个可执行文件,装一次就全有了,不需要另外装 Node/Python 运行时,也不需要账号。

它要解决的痛点非常具体:漏洞太多,单一数据库已经不够用。README 引用了 2025 年发布的 48,185 个 CVE(比 2024 年多五分之一),2026 年 10 月底前已超过 84,000 个。更关键的是 NIST 在 2026 年 4 月宣布 NVD 已无法分析每一个 CVE,转而优先处理 CISA KEV 目录和关键软件,老 backlog 不再排期。于是「这漏洞影不影响我们、现在修还是能拖」这个问题,必须靠多个独立信源交叉验证才能回答。

CVE Intel 的做法:给它一个 CVE ID / 项目目录 / 容器镜像 / 本机已装软件 / 自己的域名 / 可疑 IP、文件哈希或域名,它一次性查 39 个公开安全数据源,然后给出一个 0–100 的风险分、一句人话建议、以及背后的证据链(CVSS 及其出处、EPSS 30 天概率及趋势、KEV 日期、ENISA exploited 标记、Metasploit/Exploit-DB/Nuclei/GitHub PoC 证据、CISA SSVC 决策)。

它还有一个独特视角:Landscape(威胁全景)——把「本周各信源之间发生了什么变化」做成日报,包括新进的 KEV、ENISA 标记被利用但 KEV 未收录的 CVE、EPSS 涨幅榜、新 Metasploit 模块、Project Zero 野外零日等。

成熟度:仓库卡片标注 experimental,stars 92(周增 +21),许可证 MIT OR Apache-2.0。最新 release v0.3.16(发布于 2026-10-23)。


二、它解决什么问题

  1. 分诊优先级。CVSS 只说「有多严重」,不说「会不会被利用」。CVE Intel 的风险分把 CVSS、EPSS、KEV、公开 PoC 四项加权合成,让 Log4Shell 排在前面,而不是那个 CVSS 9.8 但没人用的漏洞。
  2. NVD 的评分滞后与缺口。当 NVD 还没给某 CVE 评分时,工具回退到 CVE.org 记录里 CNA 或 CISA 给的分。
  3. 一个扫描器不够。CISA KEV(美国政府已确认被利用目录)和 ENISA EUVD(欧盟数据库)的 exploited 标记是互相独立的——ENISA 说被利用但 KEV 没收录的 CVE 单列一栏,这正是 NIST 所说的「单库不够」。
  4. 依赖排序。把项目文件夹拖进去,它解析 lockfile / manifest / SBOM,按真实风险而非严重度排序,并给出修复版本。
  5. 重复告警去重。同一问题在 GitHub、PyPI、发行版各自发布公告时,只显示一次。
  6. 持续监控。本地 watchlist 记录厂商/产品/包/CVE,每次刷新记录变化(新 CVE、KEV 收录、EPSS 跳变、新利用代码、CVSS 修订、修复版本出现)。
  7. 把安全知识接进 AI 编码助手。通过 MCP,Claude Code / Cursor / VS Code 在写代码时能直接查漏洞情报。

三、快速安装

从 Releases 下载对应平台的文件即可。桌面应用、CLI、MCP server、REST API 都是这一个文件。

OS 文件 怎么跑
Windows CVE-Intel_<version>_windows-x64-setup.exe(或 …-portable.exe) 跑安装器,然后打开 CVE Intel
macOS(Apple Silicon 与 Intel 通用) CVE-Intel_<version>_macos-universal.dmg 拖进 Applications
Linux CVE-Intel_<version>_linux-x64.AppImage(或 .deb) chmod +x 后运行

以 v0.3.16 为例:

# macOS
"/Applications/CVE Intel.app/Contents/MacOS/cve-intel" triage CVE-2024-3400

# Linux(AppImage)
chmod +x CVE-Intel_0.3.16_linux-x64.AppImage
./CVE-Intel_0.3.16_linux-x64.AppImage triage CVE-2024-3400

# Windows(默认按用户安装)
"%LOCALAPPDATA%\CVE Intel\cve-intel.exe" triage CVE-2024-3400

Linux 装 .deb 的话,可执行文件在 /usr/bin/cve-intel。每个 release 附带 .sha256 校验文件,CI 场景建议先校验。

不需要账号,不需要任何 API key 就能开始。 大部分数据源默认开放:EPSS 及其日更文件、KEV、ENISA EUVD、CVE.org、CISA Vulnrichment、OSV、CVSS、Exploit-DB、Metasploit、PoC-in-GitHub、Project Zero、CISA advisories、CIRCL sightings、ATT&CK、CAPEC、crt.sh、Ransomwhere、hashlookup、Pwned Passwords。NVD 无 key 时限速较低。大文件源(EPSS 日更、Exploit-DB、Metasploit、ATT&CK、CAPEC、CTID 映射)下载一次后转成小索引,每天或每几小时刷新。

想更快、更多利用情报,可在 Settings → Data source API keys 里加免费 key(VulnCheck token 可解锁 VulnCheck KEV 与 XDB)。


四、核心用法

4.1 CLI 命令(一个可执行文件跑全部模式)

双击打开是 GUI;带任何参数运行就进入 CLI / MCP server / REST server。

cve-intel --version

# 单个 CVE 分诊(人话输出)
cve-intel triage CVE-2024-3400
cve-intel triage CVE-2024-3400 --json          # JSON

# 批量对比并给出打补丁顺序(2~10 个)
cve-intel compare CVE-2024-3400 CVE-2023-44487 CVE-2014-0160

# 依赖扫描
cve-intel scan deps ./my-project
cve-intel scan deps ./my-project --format sarif
cve-intel scan-deps package-lock.json --sarif     # 扫单个 lockfile,打 JSON

# 查修复版本
cve-intel fix log4j-core maven 2.17.1

# 某个产品的已知漏洞(KEV 优先)
cve-intel product "Apache Tomcat" --version 9.0.80

# KEV 目录检索
cve-intel kev-search --vendor Fortinet
cve-intel kev-search --ransomware

# 本周威胁全景
cve-intel landscape

# watchlist
cve-intel watch add vendor:Fortinet
cve-intel watch add package:lodash
cve-intel watch list|remove|refresh|changes

# 威胁情报(IP / 哈希 / 域名)
cve-intel ip 1.2.3.4
cve-intel hash <sha256>
cve-intel domain example.com
cve-intel password-check

# 自然语言提问(默认走本地模型)
cve-intel ask "Should we patch CVE-2024-3400 this weekend?"

# 本地模型管理
cve-intel models list|download|remove
cve-intel llama status|install|install-mlx     # install-mlx 用于 Apple Silicon

# 数据源与运维
cve-intel sources --probe
cve-intel health
cve-intel clear-cache
cve-intel keys list|links|set|remove

# 起服务器
cve-intel mcp        # MCP over stdio
cve-intel serve      # HTTP server(同时提供 MCP 与 REST)

输出格式约定:triage、fix、product、kev-search、landscape、watch、sources、ask 打印可读文本,加 --json 出 JSON;lookup、epss、kev 打印文本,其他 lookup 类命令直接输出 JSON,可直接喂 jq。每个命令都有 --help。

4.2 风险分公式

README 给出的公开公式:

Risk = CVSS×0.20 + EPSS×0.35 + KEV×0.30 + PoC×0.15   (booster 最高 ×1.27,上限 100)

即 EPSS 权重最高(0.35),KEV 次之(0.30),CVSS 只占 0.20——这解释了为什么一个 CVSS 9.8 但没人利用的漏洞会排到 LOW。任何进入 CISA KEV 的 CVE 恒为 CRITICAL。

排序规则:KEV 优先,然后按风险分;同分时依次用「已知勒索软件使用 → EPSS → 利用成熟度 → CVSS → 更早的 KEV due date」打破平局。

4.3 CI 与自动化

# 门禁:命中则让构建失败
cve-intel scan deps ./src --fail-on kev
cve-intel scan deps ./src --fail-on-severity critical

# 输出 SARIF 供 GitHub code scanning 使用
cve-intel scan deps ./src --format sarif > results.sarif

退出码约定:

退出码 含义
0 没有门禁被触发
1 出错;或用了 --strict 且有东西没能检查;或基于 KEV 的门禁但 CISA KEV 加载失败
2 命令行参数写错
3 门禁被触发(可用 --exit-code N 改)

关键默认行为:不加 --strict 时,任何「检查不了」的情况(OSV 拒了某个包、EPSS 或利用索引不可达)只报到 stderr,不会让构建失败。这是刻意的——CI 上网络抖动不该误红。但如果你要的是「查不到就必须失败」,得显式加 --strict。

省流选项:--enrich basic 会跳过利用索引(约 50 MB,每日下载一次)。CI runner 上请缓存 CACHE_DB_PATH,避免每次都重下。

4.4 MCP server

MCP server 暴露 38 个工具,加上 resources(kev://catalog、epss://scores/{cve_id}、manifest://tool-hash)与 prompts(patch_decision、compare_and_prioritize、dependency_triage)。

# 方式一:stdio(应用关闭时也能用)
cve-intel mcp

# 方式二:HTTP(默认 8000 端口)
cve-intel serve

桌面应用内的 MCP Server 视图更方便:启停、选端口(默认 8000)、可设「打开应用时自动启动」。该服务器只监听 127.0.0.1 并拒绝来自网页的请求,所以本地其他程序和别的机器都够不着。它复用你在 Settings 里配好的数据源和 API key——Agent 拿到的是你自己的 key 额度。

手动配置客户端时,两种接法都可以:Agent 通过 HTTP 连到应用起的服务器,或自己用 stdio 起一份。

4.5 REST API

REST 挂在 /api/v1 下,与 MCP 共用同一个 HTTP server。

curl http://127.0.0.1:8000/api/v1/sources
curl http://127.0.0.1:8000/api/v1/kev

/api/v1/ask 只使用本地模型(或 CVE_LLM_BASE_URL),绝不走云厂商——所以调用方无法偷花你的云端 key。

4.6 本地 AI

在应用里打开 Local Model 下载模型即可让 Ask AI 的回答完全不离开本机。README 与第三方索引提到的模型档位:

模型 下载体积 最低内存 备注
Qwen 2.5 1.5B Instruct (Q4_K_M) ~1.0 GB 4 GB 最快
Qwen 2.5 3B Instruct (Q4_K_M) ~1.9 GB 6 GB 推荐默认
Llama 3.2 1B Instruct (Q4_K_M) ~0.8 GB 4 GB 最小
Llama 3.2 3B Instruct (Q4_K_M) ~2.0 GB 6 GB 聊天更强
Qwen 2.5 7B Instruct (Q4_K_M) ~4.7 GB 10 GB 可选升级

也可以 cve-intel ask "..." --provider openai|anthropic|gemini 走云端模型。

4.7 架构(想从源码构建的话)

crates/cve-core     与 harness 无关的引擎:38 个信源客户端、风险打分器、SSVC、
                    CVSS、校验器、lockfile/SBOM 解析器、SARIF 输出、SQLite 缓存、
                    设置库、活动日志与 watchlist、landscape briefing、信源目录、
                    llama.cpp 与 MLX 管理、云厂商设置与 Ask agent。无 MCP/Tauri/CLI 类型
crates/cve-server   cve-intel 二进制:MCP(stdio 与 streamable HTTP)、
                    REST(/api/v1)与 CLI,都是 cve-core 之上的薄适配层
apps/desktop        Tauri 应用,原生链接 cve-core 与 cve-server

仓库根目录有 Dockerfile、xtask/、scripts/、crates/、apps/、examples/。


五、典型适用场景

  • 安全团队做补丁排序:把一屏 CVSS 9.x 的告警丢进去,拿到「先修哪个」的顺序,而不是自己排。
  • 开发团队自查依赖:拖入项目目录,找出 log4j-core 这类真实会被利用的漏洞,以及该升到哪个版本。
  • CI 门禁:--fail-on kev 卡住已被在野利用的依赖,SARIF 直接喂给 GitHub code scanning。
  • 合规审计留痕:本地 watchlist + 扫描历史,记录每次刷新发生了什么变化。
  • 给 AI 编码助手装护栏:Claude Code 写依赖时能实时查证,避免引入已知被利用的包。
  • 威胁情报初筛:日志里出现可疑 IP / 哈希 / 域名,本地查一遍再决定是否升级。

六、坑与注意

  1. cve-intel serve 无鉴权且允许跨域请求。README 明确写:这样浏览器前端才能调,但也意味着你浏览器里打开的任何网页都能访问它。必须限制在 loopback、用完就停,或者自己套一层带鉴权的反向代理。桌面应用自己起的那个服务器则会拒绝网页请求——两者安全模型不同,别混用。
  2. 桌面应用自起的服务器只监听 127.0.0.1,外部访问不了。想远程访问必须走 cve-intel serve 并自行加鉴权。
  3. CI 里默认「查不到 ≠ 失败」。不加 --strict 时,OSV 拒包、EPSS 不可达等只写 stderr。这是避免误红的正确设计,但如果你以为 CI 绿了就等于查全了,那就错了——该加 --strict 的地方要加。
  4. 退出码 1 的含义有重叠:既表示真出错,也表示 --strict 下有东西没检查成功,还表示 KEV 加载失败时的 KEV 门禁。CI 脚本里不要把 1 一律当「工具坏了」,得看 stderr。
  5. --enrich basic 会跳过利用索引(约 50 MB 的 Exploit-DB / Metasploit 等)。这会让「有没有公开 PoC」这一维度失真,风险分会偏低。CI 上要么缓存 CACHE_DB_PATH(README 建议做法),要么明确接受这一取舍。
  6. AI 助手的回答可能出错。README 自己说:本地小模型仍会把细节弄错,任何你要据此行动的回答,请回到 CVE Triage 核。让模型自己决定该查什么(“which lookup”)时,大模型和云端比小模型更可靠。
  7. 风险分会撞顶。多个「已利用 + 高 EPSS」的 CVE 常常都是 100 分,所以同分很常见,真正的排序差异藏在 tie-breaker 里。
  8. ENISA EUVD / VulnCheck KEV 只影响 SSVC 的 Exploitation 输入,不改变风险分。别把 SSVC 变了当成风险分变了。
  9. 版本与数字在第三方渠道已过期。本次核验时,第三方索引站(Kitploit)仍显示「31 tools, 25 sources」,而仓库 README 当前是「38 tools, 39 data sources」;README 内嵌的 BibTeX 示例写 version = {0.3.0},而实际最新 release 已是 v0.3.16。引用时用 cve-intel --version 的实际输出,别抄 README 里的示例值。
  10. 数据源条款要自己核。README 明确:它只查询这些服务,不拥有也不重新发布它们的数据,你拷出来的内容适用各家的条款,商用前尤其要逐个检查当前条款。这不是法律意见。
  11. 扫描会向 OSV.dev 和 NVD 发送包名和版本号。包名版本通常不敏感,但如果你有严格的数据外发策略,README 说清了外发边界,值得先读一遍。
  12. 它是分诊工具,不是扫描器。README 强调:它不探测、不端口扫描、不攻击任何东西,也不替你打补丁。暴露面检查是被动的——只问 Shodan、证书透明日志等公开来源「已经知道关于你名下域名的什么」,不会主动联系你的服务器。

七、与同类对比

维度 cve-intel NVD / OSV.dev 直查 Grype / Trivy Snyk Nuclei
形态 单文件桌面 + CLI + REST + MCP API / 网页 CLI / CI SaaS + CLI 扫描引擎
排序逻辑 风险分(CVSS+EPSS+KEV+PoC) 无 多为严重度 严重度 + 商业情报 匹配规则命中
利用情报 ✅ Metasploit / Exploit-DB / Nuclei / GitHub PoC ❌ 部分 部分 自身即 PoC 库
KEV + ENISA 双源 exploited ✅ 且单列 ENISA-only 栏 ❌ 部分 部分 ❌
SSVC 决策 ✅ 用 CISA 官方 Vulnrichment ❌ ❌ ❌ ❌
本地隐私 ✅ 全本地、默认不发包名 — ✅ ❌ 需上传 ✅
AI 助手接入 ✅ MCP 38 工具 ❌ ❌ 部分 ❌
免费 ✅ MIT/Apache-2.0 ✅ ✅ ❌ 商业 ✅

真正的差异在排序而非检测:Grype / Trivy 能更完整地覆盖各语言生态的 lockfile 解析,而 cve-intel 的强项是「这个漏洞现在到底会不会被用来打你」这一层判断——EPSS、KEV、PoC 证据链、CISA SSVC。两者其实是互补的:Trivy 负责「有什么」,cve-intel 负责「先修哪个」。

对个人开发者,它比 Snyk 之类更省心(本地、无账号);对企业,Snyk/Dependency-Track 有成熟的合规报表、团队协作、持续监控和工单流程,这些 cve-intel 目前没有。


八、一句话结论

推荐:做漏洞分诊和依赖风险排序,cve-intel 是一个值得收藏的免费本地工具——单文件、零账号、MIT/Apache-2.0、还有 MCP 让 AI 助手能用;但它不能替代 Trivy/Grype 式的生态覆盖与 Snyk 式的团队合规流程,而且 serve 无鉴权这条你必须自己兜住。


附:本文来源与核验状态

来源 用途 状态
https://raw.githubusercontent.com/Fazmin/cve-intel/main/README.md(64KB,分块提取) 主体事实(安装、CLI、公式、CI、MCP/REST、架构) ✅ 已 fetch(2026-10-23 21:32 UTC)
https://api.github.com/repos/Fazmin/cve-intel/releases/latest 最新版本 v0.3.16、发布时间 2026-10-23、各平台资产名 ✅ 已 fetch
https://api.github.com/repos/Fazmin/cve-intel/contents/ 仓库结构(crates/、apps/、xtask/、Dockerfile 等) ✅ 已 fetch
web_search(1 次) 交叉核对工具/信源数量 ✅ 完成
仓库卡片 organized/repo_cards/4565-fazmin-cve-intel.md 分类、stars 92、周增 +21、成熟度 experimental ✅ 已读
Kitploit 第三方索引页 仅用于发现版本漂移现象 ⚠️ 非权威,仅作旁证

待核 / 不确定处: - ⚠️ 风险分公式 Risk = CVSS×0.20 + EPSS×0.35 + KEV×0.30 + PoC×0.15(boosters 最高 ×1.27,上限 100) 来自 README 正文,但「boosters」的具体触发条件与权重 README 未展开,需要读源码 crates/cve-core 的风险打分器才能确认。 - ⚠️ 本地模型体积/内存对照表来自第三方索引站转述的 README 内容,未逐字比对原文表格;模型档位请以应用内实际下载为准。 - ⚠️ CLI 各子命令的完整参数列表(如 --fail-on 可选值全集、--enrich 层级、serve 的端口/绑定地址参数)未逐一核验,README 明确指向 cve-intel <command> --help。 - ⚠️ REST API 的具体端点列表未从 README 中完整取得(README 64KB,本次按 query 分块提取),只确认了 /api/v1 前缀、/api/v1/ask 的行为与 resources 命名。 - ⚠️ 「39 个数据源 / 38 个工具」两个数字在 README 顶部标语与正文之间一致,但第三方的 Kitploit 页仍写 25 sources / 31 tools(旧快照),说明文档更新较快。 - ⚠️ 本攻略未实际运行该二进制,全部命令行为均来自 README 文档描述。