zetkee/network-vulnerability-scanner
GitHub: zetkee/network-vulnerability-scanner
用于追踪 Fortigate、Cisco、Ubiquiti、Mikrotik 等网络设备近期漏洞的 Web 应用,结合厂商 RSS 与 NVD 数据源,支持多账户协同标记和备注。
Stars: 0 | Forks: 1
# 网络设备漏洞扫描器
用于监控过去 30 天内网络设备(Fortigate、Cisco、Ubiquiti、Mikrotik)关键漏洞的 Web 应用程序。
## 功能
- **4 大核心网络组件**:Fortigate、Cisco、Ubiquiti、Mikrotik
- **最新漏洞**:仅显示过去 30 天内的漏洞
- **详细信息**:
- CVE ID 以及指向 NVD 和 MITRE 的直接链接
- 严重性(Critical、High、Medium、Low)
- 漏洞描述
- 受影响的系统和版本
- 修复措施
- 发布日期
- 来源(NVD、MITRE、vendor advisories)
- **清晰摘要**:按严重性分类的统计数据
- **响应式设计**:兼容桌面和移动设备
## 使用说明
### 运行应用程序
**获取完整功能(包括 vendor RSS feed):**
1. 启动本地 PHP 服务器:
cd "项目路径"
php -S localhost:8000
2. 在浏览器中打开 http://localhost:8000
3. 点击选定的厂商按钮
**测试 RSS feed:**
1. 启动 PHP 服务器(见上文)
2. 打开 http://localhost:8000/test-rss.html
3. 点击按钮测试各个 vendor
4. 将显示 debug 信息和已加载的 advisories 列表
**基础功能(仅限 NVD/MITRE):**
1. 直接在浏览器中打开 `index.html` 文件
2. Vendor RSS feed 将不可用(受 CORS 限制)
3. 仅加载来自 NVD API 的数据
### 数据来源
应用程序**主要使用特定 vendor 的数据源**获取最新信息,并**次要使用 NVD/MITRE** 获取标准化的 CVE 数据:
**主要来源(厂商 RSS feed):**
- **Cisco PSIRT**: https://sec.cloudapps.cisco.com/security/center/psirtrss20/CiscoSecurityAdvisory.xml
- **Fortinet PSIRT**: https://www.fortiguard.com/rss/ir.xml
- **MikroTik Security Blog**: https://blog.mikrotik.com/rss/?cat=security
- **Ubiquiti**: 目前没有公开的 RSS feed
**次要来源(标准化 CVE 数据库):**
- **NVD (National Vulnerability Database)**: https://nvd.nist.gov/
- **MITRE CVE**: https://cve.mitre.org/
**为什么主要使用 vendor RSS?**
- 厂商发布漏洞的时间通常早于 NVD
- 来自厂商的直接信息源,内容更加及时
- 关于新 advisories 的即时通知
### 漏洞信息
对于每个漏洞,应用程序会显示:
1. **CVE ID**:漏洞的唯一标识符,附带指向 NVD 的链接
2. **严重性**:根据 CVSS 分数分为 CRITICAL、HIGH、MEDIUM、LOW
3. **描述**:详细的英文漏洞描述
4. **受影响的系统**:存在风险的固件和系统版本列表
5. **修复措施**:修复建议(更新、patche)
6. **发布日期**:漏洞发布的时间
7. **来源**:指向 NVD、MITRE 和 vendor advisories 的链接
## 账户和权限
应用程序包含 4 个默认账户:
| 账户 | 默认密码 | 角色 | 权限 |
|------|----------------|------|-----------|
| `host` | `host2026!` | Host(只读) | 浏览漏洞,无法标记 |
| `specialista1` | `spec1-2026!` | Specialista | + “已解决”标记、备注、“我的已解决” |
| `specialista2` | `spec2-2026!` | Specialista | + “已解决”标记、备注、“我的已解决” |
| `specialista3` | `spec3-2026!` | Specialista | + “已解决”标记、备注、“我的已解决” |
**建议**:首次登录后,每个 specialista 应在“账户设置”中更改密码(还可在此处选择头像)。
Specialista 可以在每个漏洞旁勾选“已解决”(例如在内部工具中创建 ticket 后)并添加备注。他们可以在“我的已解决”标签页中找到自己标记为已解决的条目,也可以在此取消标记。
标记和备注与特定账户绑定——每个 specialista 只能看到自己的内容。
### 配置云存储 (Redis)
账户、密码、头像、标记和备注存储在 Redis 数据库中(Vercel Marketplace 集成 - Redis Cloud),以便跨设备/浏览器使用:
1. 在 Vercel 项目的 dashboard 中,打开 **Storage** 标签页 → **Create Database** → **Redis**,并将其与项目关联。
2. Vercel 会自动填充环境变量 `REDIS_URL`。
3. `api/` 中的 Serverless 函数使用 npm 包 `redis`(参见 `package.json`)——Vercel 会在部署时自动安装它。
4. 在下次部署后,首次登录时会自动使用上述默认密码创建账户。
如果未配置 Redis(例如通过 `php -S` 或 `start-server.bat` 进行本地开发),应用程序将切换到 `localStorage`——此时登录和保存标记将仅限于单个浏览器内有效。
## 技术细节
### 项目文件
- `index.html` - 应用程序的主要 HTML 结构
- `styles.css` - 样式和响应式设计
- `app.js` - 用于加载和显示漏洞的 JavaScript 逻辑
- `rss-proxy.php` - 用于加载 vendor RSS feed 的 PHP 代理(解决 CORS,本地服务器)
- `api/rss.js` - 用于 vendor RSS feed 的 Vercel Serverless 代理(生产部署)
- `api/_kv.js` - 用于 Vercel KV(Upstash Redis REST API)的共享 helper - 账户和标记
- `api/login.js` - 登录(针对 KV 验证密码)
- `api/account.js` - 修改密码和头像
- `api/flags.js` - Specialista 针对特定 CVE 的标记和备注
- `test-rss.html` - 用于验证 RSS 代理功能的测试页面
- `test-rss.php` - 用于 PHP 代理的 CLI 测试脚本
### API
应用程序使用 **NVD API 2.0** 加载漏洞,并提供两种搜索方法:
**方法 1 - CPE (Common Platform Enumeration)**:
- 根据标准化的厂商标识进行更精确的搜索
- Endpoint: `https://services.nvd.nist.gov/rest/json/cves/2.0?virtualMatchString=cpe:2.3:*:vendor:*`
- 所有厂商的主要使用方法
- 使用 `virtualMatchString` 参数进行 CPE 匹配
**方法 2 - 关键字**:
- 根据漏洞描述中的关键字进行搜索的备用方法
- Endpoint: `https://services.nvd.nist.gov/rest/json/cves/2.0?keywordSearch=keyword`
- 结合两种方法可确保覆盖全面
**参数**:
- 加载时间范围:过去 90 天(已扩展以获得更好的覆盖率)
- 显示过滤:仅限过去 30 天内的漏洞
- Rate limiting:请求间隔 1.5 秒
- 每页结果:100 个 CVE
### 搜索参数
**CPE Vendors(主要)**:
- **Fortigate**: `cpe:2.3:*:fortinet:*`
- **Cisco**: `cpe:2.3:*:cisco:*`
- **Ubiquiti**: `cpe:2.3:*:ui:*`
- **Mikrotik**: `cpe:2.3:*:mikrotik:*`
**关键字(备用)**:
- **Fortigate**: fortigate, fortios, fortinet
- **Cisco**: cisco, ios, nx-os, asa, iosxe, ios-xe
- **Ubiquiti**: ubiquiti, unifi, edgerouter
- **Mikrotik**: mikrotik, routeros
## 环境要求
**完整功能:**
- PHP 7.0+(用于 RSS 代理)
- 支持以下功能的现代 Web 浏览器:
- ES6+ JavaScript
- Fetch API
- CSS Grid
- Flexbox
- 活动的互联网连接
**基础功能(不包括 vendor RSS):**
- 仅需现代 Web 浏览器
- 活动的互联网连接
## 注意事项
- 应用程序使用**两种搜索方法**(CPE + 关键字)以确保完全覆盖
- NVD API 有 Rate limit,因此应用程序在请求之间会等待 1.5 秒
- 根据漏洞数量和搜索次数,加载可能需要 10-20 秒
- 应用程序搜索过去 **90 天**内的漏洞,然后过滤显示为 **30 天**
- 如果过去 30 天内没有漏洞,应用程序将显示总共找到的漏洞数量
- 自动删除重复的 CVE
- 结果按严重性和日期排序
- Console log 包含有关搜索进度的 debug 信息
## 故障排除
**如果未显示任何漏洞:**
1. 打开 Developer Console (F12) 并检查 console log
2. 检查对 NVD API 的访问是否被阻止 (CORS)
3. 尝试通过 HTTP 服务器运行应用程序,而不是直接打开文件
4. 等待更长时间——加载最多可能需要 20 秒
5. 检查过去 30 天内是否确实存在漏洞
**如果遇到 CORS 错误:**
- 使用本地 Web 服务器(例如 `python -m http.server` 或 VS Code Live Server)
- 对于从 `file://` 协议发起的直接调用,NVD API 可能存在限制
## 作者
Zdenek Klus (zdenek.klus@gmail.com)
## 许可证
本项目专为个人和教育目的而创建。
标签:CVE, OpenVAS, PHP, RSS, 多模态安全, 搜索引擎查询, 数字签名, 数据可视化, 漏洞追踪, 网络设备, 自定义脚本