rebugui/open-cve-scanner
GitHub: rebugui/open-cve-scanner
一款聚合 NVD、OSV、GitHub Advisory 三大漏洞数据源的开源依赖扫描工具,支持多生态系统和多格式报告输出。
Stars: 0 | Forks: 0
# CVE Scanner
开源漏洞扫描技能 - Open Source Vulnerability Scanner
## 🎯 概述
CVE Scanner 是一款用于分析开源软件安全漏洞并生成报告的强大工具。它从 NVD (NIST)、OSV.dev (Google)、GitHub Advisory 三个数据源查询 CVE 漏洞,并结合最新版本信息提供安全报告。
## ✨ 主要功能
### 🔍 多 CVE 数据源
- **NVD (NIST)** - 美国国家漏洞数据库
- **OSV.dev (Google)** - 开源专用漏洞数据库
- **GitHub Advisory** - GitHub 安全公告
### 📦 支持的生态系统
- **npm** (Node.js)
- **PyPI** (Python)
- **Maven** (Java)
- **Go** (Golang)
- **crates.io** (Rust)
- **RubyGems** (Ruby)
- **Packagist** (PHP)
- **NuGet** (.NET)
### 📄 支持的文件格式
- `package.json` / `package-lock.json`
- `requirements.txt` / `Pipfile.lock`
- `pom.xml` / `build.gradle`
- `go.mod` / `go.sum`
- `Cargo.lock`
- `composer.lock`
- `Gemfile.lock`
### 📊 输出格式
- **Markdown** - 可读性好的文档格式
- **Excel** - 用于电子表格分析
- **CSV** - 用于数据处理
- **JSON** - 用于程序集成
## 🚀 快速开始
### 安装
```
# 克隆仓库或进入技能目录
cd ~/.openclaw/workspace/skills/cve-scanner
# 安装依赖
pip install -r requirements.txt
```
### 基本用法
#### 单个包扫描
```
# 基础扫描
./cve-scanner "log4j-core" "2.14.0"
# 严重程度过滤
./cve-scanner "openssl" "1.1.1k" --severity HIGH,CRITICAL
# JSON 输出
./cve-scanner "spring-framework" "5.3.18" --output json
```
#### 依赖文件扫描
```
# 扫描 package.json
./cve-scanner --file package.json
# 扫描 requirements.txt(Excel 输出)
./cve-scanner --file requirements.txt --output excel
# 扫描 pom.xml(仅 CRITICAL)
./cve-scanner --file pom.xml --severity CRITICAL
```
## 📖 使用示例
### 示例 1: Log4j 漏洞分析
```
$ ./cve-scanner "log4j-core" "2.14.0"
# CVE Scanner 漏洞分析报告
## 📦 log4j-core
| 항목 | 내용 |
|------|------|
| 현재 버전 | 2.14.0 |
| 최신 버전 | 2.23.1 |
| 발견 CVE 수 | 3건 |
### 漏洞列表
| CVE ID | 심각도 | CVSS | 설명 |
|--------|--------|------|------|
| CVE-2021-44228 | 🔴 CRITICAL | 10.0 | Log4Shell - JNDI 기능 원격 코드 실행 취약점 |
| CVE-2021-45046 | 🔴 CRITICAL | 9.0 | DoS 취약점 |
| CVE-2021-45105 | 🟠 HIGH | 7.5 | 스택 추적 정보 누출 |
### 🔄 升级建议
- **긴급도**: 🔴 CRITICAL - 즉시 업그레이드 권장
- **최소 권장 버전**: `2.17.1`
- **최신 버전**: `2.23.1`
```
### 示例 2: 项目整体依赖审计
```
$ ./cve-scanner --file package.json --output excel
패키지 분석 중... (150개 패키지)
CVE 조회 중... (NVD, OSV, GitHub Advisory)
Report saved to: cve-scanner-report-20260309-170500.xlsx
```
## ⚙️ 选项
| 选项 | 描述 | 默认值 |
|------|------|--------|
| `package` | 包名称 | - |
| `version` | 当前版本 | - |
| `--file`, `-f` | 依赖文件路径 | - |
| `--ecosystem`, `-e` | 指定生态系统 (npm, PyPI, Maven 等) | 自动检测 |
| `--severity`, `-s` | 严重级别过滤器 (CRITICAL,HIGH,MEDIUM,LOW) | 全部 |
| `--output`, `-o` | 输出格式 (markdown, excel, json, csv) | markdown |
| `--no-cache` | 不使用缓存 | 使用缓存 |
| `--nvd-key` | NVD API 密钥 | - |
| `--github-token` | GitHub 令牌 | - |
## 🔑 API 密钥配置(可选)
### NVD API 密钥
使用 NVD API 密钥可将 Rate Limit 从每 30 秒 5 次增加到 50 次。
```
# 设置环境变量
export NVD_API_KEY="your-nvd-api-key"
# 或在命令行中指定
./cve-scanner "package" "version" --nvd-key "your-key"
```
NVD API 密钥申请: https://nvd.nist.gov/developers/request-an-api-key
### GitHub 令牌
使用 GitHub 令牌可将 Advisory API Rate Limit 从 60 次/小时增加到 5,000 次/小时。
```
# 设置环境变量
export GITHUB_TOKEN="your-github-token"
# 或在命令行中指定
./cve-scanner "package" "version" --github-token "your-token"
```
GitHub 令牌生成: https://github.com/settings/tokens
## 🏗️ 架构
```
cve-scanner/
├── SKILL.md # 스킬 메타데이터
├── README.md # 이 파일
├── requirements.txt # Python 의존성
├── cve-scanner # CLI 래퍼 스크립트
└── scripts/
├── cve-scanner.py # 메인 진입점
├── cve_sources/ # CVE 데이터 소스
│ ├── __init__.py
│ ├── nvd_api.py # NVD API 클라이언트
│ ├── osv_api.py # OSV.dev API 클라이언트
│ └── github_advisory.py # GitHub Advisory API 클라이언트
├── parsers/ # 의존성 파일 파서
│ ├── __init__.py # 모든 파서 구현
│ └── ...
└── utils/ # 유틸리티
├── __init__.py
├── version_compare.py # 버전 비교 로직
└── report_generator.py # 리포트 생성기
```
## 🔧 开发
### 运行测试
```
# 单包测试
python3 scripts/cve-scanner.py "lodash" "4.17.15"
# 文件解析测试
python3 scripts/cve-scanner.py --file test_package.json
```
### 添加新解析器
在 `scripts/parsers/__init__.py` 中添加新的解析器类:
```
class MyParser(BaseParser):
def parse(self, file_path: str) -> List[Dict]:
# 파싱 로직 구현
return dependencies
# 注册到 PARSERS 字典
PARSERS['my-file.lock'] = MyParser
```
## 📈 性能考量
- **单个包**: 目标在 10 秒内完成
- **批量扫描 (100个+)**: 批量处理 + 显示进度
- **API Rate Limit**: 自动在请求之间插入适当的延迟
- **缓存**: 防止在同一会话内重复查询已查询过的包
## ⚠️ 注意事项
1. **API Rate Limit**: NVD、GitHub API 都有 Rate Limit。建议在进行批量扫描时使用 API 密钥。
2. **版本格式**: 建议使用遵循 SemVer 的版本格式。部分项目可能使用自定义版本格式。
3. **生态系统检测**: 自动检测可能会失败。这种情况下请使用 `--ecosystem` 选项。
4. **网络**: 需要互联网连接。
## 🤝 贡献
欢迎提交 Bug 报告、功能建议和 Pull Request!
## 📄 许可证
MIT License
## 📚 参考资料
- [NVD API 文档](https://nvd.nist.gov/developers/vulnerabilities)
- [OSV.dev API 文档](https://osv.dev/docs/)
- [GitHub Advisory API](https://docs.github.com/en/rest/security-advisories)
- [CVSS v3.1 规范](https://www.first.org/cvss/v3.1/specification-document)
标签:CVE分析, DevSecOps, GitHub Advisory, NVD数据库, OSV, Python安全工具, SCA工具, Vercel, 上游代理, 包管理器分析, 威胁情报, 开发者工具, 文档安全, 文档结构分析, 无服务器架构, 渗透测试辅助, 版本合规, 结构化查询, 自动化安全, 软件开发工具包, 逆向工具, 风险治理