SemClone/vulnq
GitHub: SemClone/vulnq
一款轻量级多源漏洞聚合查询工具,支持通过 PURL、CPE 等标识符从多个主流漏洞数据库获取 CVE、严重性评分和修复版本信息。
Stars: 0 | Forks: 0
# vulnq - 漏洞查询工具
[](https://opensource.org/licenses/Apache-2.0)
[](https://www.python.org/downloads/)
vulnq 是一个轻量级的多源漏洞查询工具,整合了来自多个漏洞数据库的安全数据。它接受各种软件标识符(PURL、CPE、哈希值),并返回包含 CVE、严重性评分和可用修复程序的全面漏洞信息。
## 主要特性
- **多种 ID 格式** - 接受 PURL、CPE 字符串和文件哈希值
- **多源聚合** - 查询 OSV.dev、GitHub Advisory、NIST NVD 等
- **智能格式检测** - 自动检测输入格式或接受显式标志
- **升级路径建议** - 在可用时识别已修复的版本
- **轻量级** - 纯 API 设计,无需本地漏洞数据库
- **灵活输出** - 支持 JSON、表格和 markdown 格式
## 安装
```
pip install vulnq
```
用于开发:
```
git clone https://github.com/SemClone/vulnq.git
cd vulnq
pip install -e .
```
## 快速开始
### 命令行
```
# 使用 Package URL 查询(自动检测)
vulnq pkg:npm/express@4.17.1
# 使用 CPE 字符串查询(示例:Apache Log4j)
vulnq --cpe "cpe:2.3:a:apache:log4j:2.14.0:*:*:*:*:*:*:*"
# 注意:漏洞数据库目前不支持基于 Hash 的查询
# 从文件查询多个标识符
vulnq --input packages.txt
# 按严重性过滤
vulnq pkg:pypi/django@3.2.1 --min-severity high
# 输出为 JSON
vulnq pkg:gem/rails@6.0.0 --format json
# 仅包含已修复版本
vulnq pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1 --show-fixes
```
### Python API
```
from vulnq import VulnerabilityQuery
# 初始化查询引擎
vq = VulnerabilityQuery()
# 按 PURL 查询
results = vq.query("pkg:npm/express@4.17.1")
# 按 CPE 查询
results = vq.query_cpe("cpe:2.3:a:apache:log4j:2.14.0:*:*:*:*:*:*:*")
# 注意:漏洞数据库目前不支持 Hash 查询
# 未来版本可能会通过文件到包的映射服务支持此功能
# 处理结果
for vuln in results.vulnerabilities:
print(f"{vuln.id}: {vuln.severity} - {vuln.summary}")
if vuln.fixed_versions:
print(f" Fixed in: {', '.join(vuln.fixed_versions)}")
```
## 支持的漏洞源
- **OSV.dev** - Google 的开源漏洞数据库
- **GitHub Advisory Database** - GitHub 安全公告
- **NIST NVD** - 国家漏洞数据库
- **FIRST.org** - 事件响应和安全团队论坛(计划中)
- **Sonatype OSS Index** - 组件漏洞数据(计划中)
## 支持的标识符格式
### Package URLs (PURLs)
- `pkg:npm/package@version`
- `pkg:pypi/package@version`
- `pkg:maven/group/artifact@version`
- `pkg:gem/package@version`
- `pkg:cargo/package@version`
- `pkg:nuget/package@version`
- `pkg:golang/module@version`
### CPE (Common Platform Enumeration)
- `cpe:2.3:a:vendor:product:version:*:*:*:*:*:*:*`
- `cpe:/a:vendor:product:version`(旧格式)
### 文件哈希值
- SHA256
- SHA1
- MD5
## 配置
vulnq 可以通过环境变量或配置文件进行配置:
```
# API Keys(可选,用于提高速率限制)
export GITHUB_TOKEN="your_github_token"
export NVD_API_KEY="your_nvd_api_key"
# Cache 设置
export VULNQ_CACHE_DIR="~/.vulnq/cache"
export VULNQ_CACHE_TTL="3600" # seconds
# Rate limiting
export VULNQ_MAX_CONCURRENT="5"
```
## 与 SEMCL.ONE 集成
vulnq 旨在与其他 SEMCL.ONE 工具无缝协作:
```
# 将 PURL 从 src2purl 管道传输到 vulnq
src2purl /path/to/project | vulnq --format json
# 检查检测到的包的漏洞
upmex /path/to/package.json | vulnq --min-severity critical
# 从 SBOM 生成漏洞报告
cat sbom.json | vulnq --input - --format markdown > vulns.md
```
## 输出格式
### 表格(默认)
```
┌──────────────┬──────────┬──────────┬─────────────────┬──────────────┐
│ CVE │ Severity │ CVSS │ Package │ Fixed In │
├──────────────┼──────────┼──────────┼─────────────────┼──────────────┤
│ CVE-2021-1234│ HIGH │ 7.5 │ express@4.17.1 │ 4.17.2 │
│ CVE-2021-5678│ CRITICAL │ 9.8 │ express@4.17.1 │ 4.18.0 │
└──────────────┴──────────┴──────────┴─────────────────┴──────────────┘
```
### JSON
```
{
"query": "pkg:npm/express@4.17.1",
"vulnerabilities": [
{
"id": "CVE-2021-1234",
"severity": "HIGH",
"cvss_score": 7.5,
"summary": "Remote Code Execution...",
"fixed_versions": ["4.17.2", "4.18.0"],
"references": [...]
}
],
"metadata": {
"sources": ["osv", "github", "nvd"],
"query_time": "2024-11-04T10:30:00Z"
}
}
```
## 开发
### 运行测试
```
# 运行所有测试
pytest
# 运行覆盖率测试
pytest --cov=vulnq tests/
# 运行特定测试
pytest tests/test_osv_client.py -v
```
### 构建
```
# 构建包
python -m build
# 本地安装以进行测试
pip install -e .
```
## 许可证
vulnq 是在 Apache License 2.0 下发布的。详情请参阅 [LICENSE](LICENSE)。
## 支持
- **问题**:[GitHub Issues](https://github.com/SemClone/vulnq/issues)
- **讨论**:[GitHub Discussions](https://github.com/SemClone/vulnq/discussions)
- **安全**:将漏洞报告发送至 security@semcl.one
*[SEMCL.ONE](https://github.com/SemClone/semcl.one) 软件成分分析工具链的一部分*
标签:Python, 无后门, 漏洞查询, 逆向工具