vbrik/distro-package-cve-query
GitHub: vbrik/distro-package-cve-query
一款基于 Red Hat 官方 OVAL 数据源的命令行工具,用于查询 RHEL 系发行版中软件包版本与 CVE 漏洞之间的双向映射关系。
Stars: 0 | Forks: 0
# distro-package-cve-query
一个用于 RHEL 及其 1:1 重建版本(AlmaLinux、Rocky Linux)的命令行 CVE 检查工具。用于解答以下两个问题:
- **该软件包是否存在漏洞?** —— 给定一个已安装的软件包版本(任意软件包,不仅限于内核),列出影响它的 CVE,哪些已在后续版本中修复,以及哪些仍未修补。
- **哪个软件包版本修复了该 CVE?** —— 给定一个 CVE ID,按 RHEL 大版本查找哪些软件包和版本修复了它,以及严重程度、CVSS3 得分和公告 ID。
使用 Red Hat 官方的 OVAL 安全数据源 (`security.access.redhat.com`)。
AlmaLinux 和 Rocky Linux 是 RHEL 的 1:1 重建版本,它们保持了相同的软件包版本/发布字符串(例如 `.el9` 标签,有时带有 `.alma`/`.rocky` 重建后缀),因此 Red Hat 的 OVAL 数据可以直接应用于它们。支持 RHEL 大版本 8 和 9。
默认显示 Red Hat 自己评估的 CVSS3 得分/向量,因为供应商通常会根据 CVE 在其实际发布的构建中的表现重新评估(例如,判定某个攻击路径在实际中比原始 CNA 评估的更难触发)。该工具会将每个得分与 [cve.org](https://cve.org) 上的权威 CVE 记录进行交叉核对,并在两者不一致时使用 `*` 标记;传递 `--cve-org` 参数可显示 cve.org 的得分/向量,而不是 Red Hat 的(反向使用相同的 `*` 标记)。
该脚本有两种模式,会根据查询内容自动选择:
- **软件包模式** —— 传入一个软件包版本字符串,列出影响该软件包的 CVE,并分为:
- 已在后续版本中修复的 CVE,包含最低修复版本、module stream(如适用)、公告 ID 以及问题/披露日期
- 尚未发布修复程序的 CVE,包含其当前状态(例如“Affected”、“Will not fix”、“Out of support scope”)
- 其修复程序已包含在给定版本中的 CVE
接受任何软件包的 `rpm -qa` / `dnf` 样式名称(例如 `nginx-1.20.1-28.el9_8.2.alma.1.x86_64`),并且仅针对内核,为方便起见支持纯 `uname -r` / `vmlinuz-*` 形式。
每个 CVE 的 CVSS3 向量都会被分解为每个组件(攻击向量、攻击复杂度、所需权限等)单独一列,并且在终端上,更危险的值(例如网络攻击向量、无需权限)会以彩色突出显示。传递 `--no-color` 可输出纯黑白内容;当输出不是终端(例如重定向到文件或通过管道传输)时,颜色会自动关闭。
- **CVE 模式** —— 传入一个 CVE ID(例如 `CVE-2024-26828`),以查看每个查询的 RHEL 大版本中哪些软件包修复了它、修复版本以及公告。为了提高可读性,子软件包会被合并到其父软件包中(例如显示 `kernel (+98 sub-packages)` 而不是列出 `kernel-devel`、`kernel-modules-core` 等),并且作为 module stream 发布的软件包会与其流标签一起显示一次;传递 `--all-packages` 可单独列出每个受影响的软件包。
OVAL 数据和 cve.org 查询结果会在本地缓存(默认 1 小时,参见 `--cache-timeout`),因为未压缩的 OVAL 数据源超过 300 MB,下载和解析需要一些时间。
## 用法
```
distro-package-cve-query.py nginx-1.20.1-28.el9_8.2.alma.1.x86_64
distro-package-cve-query.py nginx-2:1.20.1-28.el9_8.4.alma.1 # epoch form, as printed by dnf
distro-package-cve-query.py openssl-1.1.1k-17.el8_6 --min-severity moderate
distro-package-cve-query.py 5.14.0-687.5.1.el9_8.x86_64 # kernel, from `uname -r`
distro-package-cve-query.py vmlinuz-5.14.0-687.5.1.el9_8.x86_64 # kernel, from /boot
distro-package-cve-query.py CVE-2025-1974
distro-package-cve-query.py CVE-2025-1974 --rhel 9
```
运行 `distro-package-cve-query.py --help` 获取完整的选项列表。
## 环境要求
仅需 Python 3 标准库;如果已安装,会自动使用 `lxml`(更快的 XML 解析),但这并非必需。
## 许可证
MIT — 见 [LICENSE](LICENSE)。
标签:AlmaLinux, CVE查询, osquery, OVAL, RHEL, Rocky Linux, 运维安全