此仓库提供简单而强大的单行脚本,旨在帮助您快速判断服务器是否容易受到 CVE-2024-3094 的攻击,这是在 xz 工具的某些版本中发现的一个关键安全漏洞。此外,我们还提供了一种便捷的方法来扫描您的代码仓库中是否有对 xz 库的引用,这可能表明存在潜在的间接漏洞。
要确定您的服务器是否容易受到 CVE-2024-3094 的攻击,请在终端执行以下命令:
(type dpkg &>/dev/null && dpkg -l xz 2>/dev/null | awk '/^ii/{print $3}' | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed") || (type rpm &>/dev/null && rpm -q --qf "%{VERSION}\n" xz 2>/dev/null | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed")
上述命令将检查 Linux 发行版中的软件包。
或者尝试另一个选项,该选项将执行 xz 命令,通常不推荐这样做:
command -v xz &>/dev/null && { xz_version=$(xz --version | head -n 1 | awk '{print $4}'); [[ $xz_version == "5.6.0" || $xz_version == "5.6.1" ]] && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable: CVE-2024-3094"; } || echo "xz not installed"
该脚本执行以下操作:
xz 工具。xz 的已安装版本。对于使用 Docker 并担心其容器镜像中漏洞的团队,我们提供了一个使用 Trivy(Aqua Security 的开源漏洞扫描器)的复杂示例。此方法扫描 Docker 镜像中的漏洞,包括 CVE-2024-3094,并输出关于镜像安全状态的清晰结果。
以下命令使用 Trivy 扫描 Docker 镜像(debian:experimental-20240311)中的漏洞,并过滤与 liblzma5 相关的 CVE-2024-3094 结果:
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
工作原理:
Docker Run 命令:启动一个 Trivy 容器,并将当前目录挂载为卷。此设置允许 Trivy 将扫描结果直接输出到主机当前目录中的文件(result.json)。
Trivy 扫描:扫描指定的 Docker 镜像以查找漏洞,以 CycloneDX 格式(一种用于软件物料清单的标准化格式)输出结果。
使用 jq 处理:过滤扫描结果以识别 liblzma5 软件包,并检查版本是否为“5.6.0”或“5.6.1”。
漏洞检查:使用 grep 搜索 liblzma5 的易受攻击版本。如果找到,则输出“Vulnerable: CVE-2024-3094”;否则输出“Not vulnerable or liblzma5 not found”。
此方法对于自动化流水线非常有效,并且可以适应检查不同 Docker 镜像中的各种漏洞,确保您的部署安全。
要使用提供的命令扫描您自己的 Docker 镜像,请按照以下步骤根据您的需求自定义命令:
替换 Docker 镜像:将 debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 替换为您要扫描的镜像。您可以通过名称和标签(例如 yourimage:yourtag)或其摘要指定镜像。
调整漏洞检查:如果您扫描的是 CVE-2024-3094 以外的漏洞,请修改 jq 和 grep 表达式,以针对感兴趣的漏洞相关的特定软件包和版本。
例如,要扫描名为 yourimage:yourtag 的镜像:
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json yourimage:yourtag && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
自定义提示:
针对不同漏洞:将 jq 命令中的 "liblzma5@(5\\.6\\.0|5\\.6\\.1)" 替换为您感兴趣的软件包和版本。例如,要检查 openssl 版本“1.1.1”,您可以使用 openssl@(1\\.1\\.1)。
针对不同属性:根据漏洞或软件包,您可能需要调整 .name == "aquasecurity:trivy:PkgID" 以定位 CycloneDX 输出中的不同属性。
定期更新:确保您的 Trivy 实例定期更新,以拥有最新的漏洞定义。通常可以通过在运行扫描前拉取最新的 aquasec/trivy 镜像来实现。
理解输出:熟悉 Trivy 和 jq 处理的输出格式,以准确解释结果并了解对您的 Docker 镜像的影响。
xz 引用如果您维护的代码可能交互或依赖于 xz 库,那么识别任何对易受攻击库版本的显式引用至关重要。使用以下命令扫描您的仓库:
tukaani 项目是 xz 工具的主页。要在代码中找到提及:
grep -rnH "tukaani" .
对于使用 Maven 的 Java 项目,您可能在 pom.xml 中将 xz 指定为依赖项。要定位这些引用:
grep -rnH "org.tukaani:xz:" .
这些命令将递归搜索当前目录(及子目录)中的指定模式,报告文件名、行号和包含匹配内容的行。
注意: 确保您拥有在服务器上运行这些脚本或扫描仓库的必要权限。在生产系统使用前,务必在安全环境中验证和测试脚本。
欢迎通过提交拉取请求或开启问题来为此仓库贡献或提出改进建议。非常感谢您的反馈和贡献!