SemClone/vulnq

GitHub: SemClone/vulnq

一款轻量级多源漏洞聚合查询工具,支持通过 PURL、CPE 等标识符从多个主流漏洞数据库获取 CVE、严重性评分和修复版本信息。

Stars: 0 | Forks: 0

# vulnq - 漏洞查询工具 [![Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](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, 无后门, 漏洞查询, 逆向工具