Avotrix/Vulnerix

GitHub: Avotrix/Vulnerix

Vulnerix 是一款开源漏洞情报平台,通过将用户技术栈与 NVD 及 CERT-IN 的 CVE 数据进行版本感知匹配,帮助中小微企业精准发现和跟踪实际相关的安全漏洞。

Stars: 0 | Forks: 0

Untitled design (36)

# 什么是 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, 威胁情报, 实时处理, 开发者工具, 测试用例, 漏洞情报, 漏洞管理, 自动化攻击, 请求拦截, 边缘函数, 逆向工具