Avotrix/Vulnerix
GitHub: Avotrix/Vulnerix
Vulnerix 是一款开源漏洞情报平台,通过将用户技术栈与 NVD 及 CERT-IN 的 CVE 数据进行版本感知匹配,帮助中小微企业精准发现和跟踪实际相关的安全漏洞。
Stars: 0 | Forks: 0
# 什么是 Vulnerix?
Vulnerix 是一个开源的漏洞情报和报告平台,它将您的技术栈与 NVD 和 CERT-IN 公告的 CVE 进行匹配,并提供可执行的安全洞察。
演示:https://vulnerix.avotrix.in/
开源为我们奠定了基础。这是我们回馈社区的方式——专为印度 MSME(中小微企业)打造。🙏 印度优先 🇮🇳
* 🔍 将您的技术栈与 NVD 和 CERT-IN 公告进行映射匹配
* 📊 为 MSME 和 MSSP 提供实时仪表板 + 告警
* 💡 免费。开源。社区驱动。
# 我们为什么开发它?
一切始于一次与客户的交谈。
我们的一位长期客户——一家完全在 SaaS 和云应用上运行的云优先组织——向我们提出了一个简单的需求:
他们不需要复杂的企业级扫描器——他们只是不想再增加一个普通的工具。他们想要的是一款简单、及时且与他们的技术栈相关的工具。
我们四处寻找。没有完全合适的。
所以我们自己动手开发了它。
# 演示
https://github.com/user-attachments/assets/2ebc7bae-6002-4256-91c9-f12d3b05a498
## 架构
```
NVD API ──► nvd_fetcher.py ──────────────────────┐
▼
CERT-IN ──► daily_cert_extract.py ──► cert_in_cves table
└► cert_in_past_data_extract.py │
▼
Frontend (React) ──► tech_stack table ──► cve-engine (Edge Function)
│
nvd_cves ──┤
cert_in_cves ┘
│
▼
tech_stack_results ──► Dashboard
```
## 未来路线图
- 引入使用 AI 的修复步骤 (BYOK)
- 集成 CISA-KEV 数据源
- 开发 webhook 和更多通知渠道
- 自动更新技术栈
## 前置条件
- Docker Desktop
- Python 3.8+
- Node.js 18+
- NVD API 密钥 — [在此注册](https://nvd.nist.gov/developers/request-an-api-key)
## 快速开始
### 1. 启动 Supabase
```
cd Supabase/docker
cp .env.example .env
# 编辑 .env — 设置 POSTGRES_PASSWORD, JWT_SECRET, SMTP credentials
# 重要提示:将 SITE_URL 设置为你的 frontend URL(用于密码重置邮件)
# - 本地:SITE_URL=http://localhost
# - 服务器:SITE_URL=http://
docker compose up -d
```
Supabase Studio 将在 `http://localhost:8000` 提供
登录:`supabase` / (你的 `.env` 中的 DASHBOARD_PASSWORD)
### 2. 运行数据库迁移
```
cd Vulnerix
python setup_db.py --dry-run # verify DB connection first
python setup_db.py # run all migrations + grants
```
这将按顺序运行所有 SQL 迁移,并自动设置所需的表所有权和授权。迁移是幂等的——在现有数据库上重新运行是安全的(已应用的迁移将被跳过)。
### 3. 配置环境
```
cd Vulnerix
cp .env.example .env
# 编辑 .env — 填写你的 NVD_API_KEY, POSTGRES_PASSWORD, Supabase keys
```
### 4. 安装 Python 依赖
```
pip install -r Vulnerix/requirements.txt
```
### 5. 获取 NVD 数据
```
# Dry run 以验证 config
python Vulnerix/nvd_fetcher.py --dry-run
# 获取 CVEs(NVD_START_YEAR 来自 .env,例如 2021)
python Vulnerix/nvd_fetcher.py
```
获取完整年份的数据大约需要 10-20 分钟。进度会按 90 天的时间窗口显示。
### 6. 获取 CERT-IN 数据
```
# 一次性历史抓取(测试时使用 --limit)
python Vulnerix/cert_in_past_data_extract.py --start-year 2026 --limit 100
# 每日增量(通过 cron/task scheduler 运行)
python Vulnerix/daily_cert_extract.py
```
### 7. 部署 Edge Functions
```
# Linux — 从 Vulnerix 目录中
chmod +x deploy-functions.sh
./deploy-functions.sh
# 部署单个 function
./deploy-functions.sh cve-engine
```
```
# Windows — 从 Vulnerix 目录中
.\deploy-functions.ps1
# 部署单个 function
.\deploy-functions.ps1 cve-engine
```
### 8. 配置 Edge Function 环境变量
Edge Functions(尤其是 `send-email`)需要必须通过 `docker-compose.yml` 传递的环境变量。仅靠 Supabase 的 `.env` 文件是不够的——您必须显式地将这些变量映射到 `supabase-edge-functions` 容器中。
将以下 `environment:` 块添加到 `Supabase/docker/docker-compose.yml` 中的 `supabase-edge-functions` 服务中:
```
supabase-edge-functions:
container_name: supabase-edge-functions
image: supabase/edge-runtime:v1.71.2
restart: unless-stopped
volumes:
- ./volumes/functions:/home/deno/functions:Z
environment:
SMTP_HOST: ${SMTP_HOST}
SMTP_PORT: ${SMTP_PORT}
SMTP_USER: ${SMTP_USER}
SMTP_PASS: ${SMTP_PASS}
SUPABASE_URL: http://kong:8000
SUPABASE_ANON_KEY: ${ANON_KEY}
SUPABASE_SERVICE_ROLE_KEY: ${SERVICE_ROLE_KEY}
EXTRA_ALLOWED_ORIGINS: ${EXTRA_ALLOWED_ORIGINS:-}
```
然后将这些添加到 `Supabase/docker/.env`:
```
# SMTP(用于 send-email edge function)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-gmail-app-password
# Frontend origin(如果不是 localhost)— 多个使用逗号分隔
EXTRA_ALLOWED_ORIGINS=http://your-server-ip,https://your-domain.com
```
更新后,重新创建容器:
```
cd Supabase/docker
docker compose up -d supabase-edge-functions
```
验证变量是否已加载:
```
docker exec supabase-edge-functions env | grep SMTP
```
### 9. 构建并运行前端
```
docker build -t vulnerix-frontend \
--build-arg VITE_SUPABASE_URL=http://localhost:8000 \
--build-arg VITE_SUPABASE_PUBLISHABLE_KEY= \
Vulnerix
docker run -d --name vulnerix-frontend -p 80:80 vulnerix-frontend
```
前端将在 `http://localhost` 提供
## 测试流水线
1. 在 `http://localhost` 注册一个用户
2. 转到技术栈 (Tech Stack) → 添加一条记录,例如:
- Vendor(供应商):`microsoft`,Product(产品):`azure_devops`,Version(版本):`*`
3. CVE 引擎自动触发
4. 仪表板应在几秒钟内显示匹配的公告
在 Studio 中验证:
```
SELECT source, COUNT(*) FROM tech_stack_results GROUP BY source;
```
## 项目结构
```
Vulnerix/
├── src/ # React frontend
│ ├── hooks/
│ │ ├── useCVEEngine.ts # Triggers CVE matching engine
│ │ └── useSupabaseData.ts # Reads tech_stack_results for UI
│ └── pages/
│ ├── Dashboard.tsx
│ └── Advisories.tsx
├── supabase/
│ ├── functions/
│ │ ├── cve-engine/ # Matching engine (NVD + CERT-IN)
│ │ ├── send-email/ # Email notifications
│ │ └── delete-user/
│ └── migrations/ # SQL schema files
├── nvd_fetcher.py # Fetches NVD CVEs → nvd_cves table
├── cert_in_past_data_extract.py # Historical CERT-IN → cert_in_cves
├── daily_cert_extract.py # Daily CERT-IN incremental
├── cert_in_db.py # Shared DB utilities for CERT-IN scripts
├── requirements.txt # Python dependencies
└── .env.example # Environment variable template
Supabase/docker/ # Self-hosted Supabase
├── docker-compose.yml
├── .env.example
└── volumes/
└── functions/ # Edge functions served from here
```
## 数据库表
| 表 | 描述 |
|-------|-------------|
| `nvd_cves` | 带有 CPE 版本范围的 NVD 漏洞目录(由 nvd_fetcher.py 填充) |
| `cert_in_cves` | CERT-IN 公告(由 cert_in 脚本填充) |
| `tech_stack` | 用户注册的产品/供应商(每个用户+供应商+产品+版本唯一) |
| `tech_stack_results` | 每个用户匹配到的漏洞(来源:nvd / cert_in) |
| `demo_requests` | 来自落地页的演示请求表单提交 |
| `contact_messages` | 来自已认证用户的联系表单提交 |
## 关键行为
- **防止重复技术栈**:每个用户不能添加相同的供应商+产品+版本两次(在数据库和 UI 层面强制执行)
- **级联删除**:删除技术栈条目会自动删除其匹配的公告
- **版本感知匹配**:CVE 引擎使用 NVD 版本范围(versionStartIncluding、versionEndIncluding 等),仅匹配实际影响您特定版本的 CVE
- **密码重置验证**:只有已注册的用户才能收到密码重置邮件
- **邮件通知**:联系表单、演示请求和公告警报均通过 `send-email` Edge Function 发送邮件
## 添加新的漏洞来源
CVE 引擎使用可插拔的匹配器模式。要添加新来源:
1. 创建一个抓取器脚本(以 `nvd_fetcher.py` 为模板)
2. 为源数据创建一个数据库表
3. 添加一个 `match_` SQL 函数
4. 在 `supabase/functions/cve-engine/index.ts` 中实现 `VulnMatcher` 接口
5. 将其添加到 `MATCHERS` 数组中
## 定时任务
对于生产环境,请为这些脚本设置定时任务:
```
# 每日 CERT-IN 更新(cron 示例)
0 6 * * * cd /path/to/repo && python Vulnerix/daily_cert_extract.py
# 每周 NVD 刷新(获取新发布的 CVEs)
0 2 * * 0 cd /path/to/repo && python Vulnerix/nvd_fetcher.py
```
标签:CISA项目, GPT, React, Syscalls, XSS, 威胁情报, 实时处理, 开发者工具, 测试用例, 漏洞情报, 漏洞管理, 自动化攻击, 请求拦截, 边缘函数, 逆向工具