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, 上游代理, 包管理器分析, 威胁情报, 开发者工具, 文档安全, 文档结构分析, 无服务器架构, 渗透测试辅助, 版本合规, 结构化查询, 自动化安全, 软件开发工具包, 逆向工具, 风险治理