nicokempe/secscore
GitHub: nicokempe/secscore
一款基于Nuxt+Nitro的轻量级CVE漏洞评分工具,整合多源威胁情报,提供时间感知的综合优先级评分和透明可复现的模型。
Stars: 14 | Forks: 0
[](https://github.com/nicokempe/secscore)
## 描述
这个 Security Score 概念验证是一个轻量级的 Nuxt + Nitro Web 应用程序,允许你粘贴任何 CVE ID,并返回一个结合了公共信号(NVD, EPSS, CISA KEV, ExploitDB, OSV)的时间感知威胁评分(SecScore)。在阅读了论文 [SecScore: Enhancing the CVSS Threat Metric Group with Empirical Evidences](https://arxiv.org/abs/2405.08539) 并寻找一个开放、可用的概念验证后,我找不到符合论文方法或我实际需求的项目,所以我决定构建这个 PoC 来试验该模型,将其与真实的公共源结合,并调整评分和 UX 以实现现实的漏洞优先级排序。该项目有意避免使用数据库(使用 Nitro 缓存和 routeRules),公开简单的 UI 和 API,并保持模型、参数和证据完全透明,以便于可重现的研究和扩展。
## 功能
- 🔍 输入任何 CVE ID,即可获取带有当前威胁上下文的即时 SecScore
- 🌐 仅由公共数据源驱动:NVD, EPSS, CISA KEV, OSV 和 ExploitDB
- ⚡ 轻量级设计 —— 无需数据库,仅使用 Nitro 缓存和智能路由规则
- 📊 将 CVSS 基础指标与利用概率和现实世界的信号相结合
- 📝 透明的解释说明 CVE 为何被优先排序(发现 PoC,KEV 标志,EPSS 分数)
- 🎨 干净直观的 Nuxt 前端,用于快速查询和演示
- 🧩 完全开源,易于扩展额外的 API 或自定义评分逻辑
## 开发指南
本项目基于 **Nuxt 3 + Nitro** 构建,并使用 **pnpm** 作为包管理器。
### 前置条件
- [Node.js 22+](https://nodejs.org/en/)
- 全局安装 [pnpm 9+](https://pnpm.io/):
corepack enable
corepack prepare pnpm@latest --activate
## 数据源与更新
| Dataset | Purpose | Refresh guidance |
|-------------------------------------------------------------------|------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **CISA Known Exploited Vulnerabilities** (`server/data/kev.json`) | 标记正在野外被积极利用的漏洞 | `curl -s https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json -o server/data/kev.json` 然后重启(或运行 `nitro task kev:refresh`) |
| **ExploitDB snapshot** (`server/data/exploitdb-index.json`) | 突出显示公开的 PoC 及其发布日期 | 使用 `cveId`、`url` 和 `publishedDate` 重新生成整理后的 JSON;重启以加载 |
| **Model parameters** (`model-params/al-params.json`) | 控制特定类别的利用时间曲线 | 调整 `{ mu, lambda, kappa }` 并重新部署/重启 |
## API 接口
| Endpoint | Method | Description |
|-----------------------------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------|
| `/api/v1/cve/:cveId` | GET | 返回标准化的 CVE 元数据以及 SecScore 上下文。验证标识符,发送缓存头,并用 `SecScore-Model-Version` 标记响应。 |
| `/api/health` | GET | 公开进程运行时间、CPU/内存使用情况和 KEV 数据集元数据以供监控。 |
| `/api/internal/refresh-kev` | GET | 触发 KEV 数据集刷新(部署时请在身份验证后操作)。 |
公共 API 路由继承每个 IP 每小时 120 次请求的速率限制。缓存命中通过 `X-Cache` 头标记,以便你监控有效性。
## 配置
这些环境变量在运行时自定义行为:
| Variable | Description |
|-----------------------------------|-------------------------------------------------------------------------|
| `CLOUDFLARE_TURNSTILE_SITE_KEY` | 设置后启用前端的 Turnstile 组件。 |
| `CLOUDFLARE_TURNSTILE_SECRET_KEY` | 用于在服务端验证 Turnstile 令牌。 |
| `LOG_LEVEL` | 设置客户端日志详细程度(默认为 `info`)。 |
| `LOG_REMOTE_ENABLED` | 当为 `true` 时,允许将日志转发到 `LOG_SERVER_URL`。 |
| `LOG_SERVER_URL` | 远程日志端点(默认为 `https://logs.secscore.net/api/logs`)。 |
### 设置
安装所有依赖:
```
pnpm install
```
### 开发服务器
在 [http://localhost:3000](http://localhost:3000) 启动开发服务器:
```
pnpm dev
```
热模块替换(HMR)已启用,因此更改会立即应用。
### 生产环境
为生产环境构建应用程序:
```
pnpm build
```
在本地预览生产构建:
```
pnpm preview
```
### 部署
Nuxt/Nitro 支持多种部署目标(Node, serverless, edge 等)。
有关配置,请参阅 [Nuxt 部署文档](https://nuxt.com/docs/getting-started/deployment)。
## 许可证
本项目基于 [Apache 许可证](https://github.com/nicokempe/secscore/blob/main/LICENSE) 授权。
标签:CISA KEV, CVE评分, CVSS, EPSS, ExploitDB, GNU通用公共许可证, GPT, MITM代理, Nitro, Node.js, Nuxt 3, NVD, OSV, pnpm, SecScore, Vercel, Vue.js, 威胁情报, 开发者工具, 数据聚合, 时间感知评分, 漏洞优先级, 漏洞管理, 网络安全, 网络测绘, 自动化攻击, 隐私保护