CVE-2024-3094 漏洞自动化检测与修复工具
本项目针对近期曝光的 CVE-2024-3094 漏洞(xz-utils 恶意代码后门),提供了完整的自动化检测与修复方案。包含适用于单机快速响应的 Shell 脚本,以及面向大规模服务器集群的 Ansible Playbook 自动化方案,帮助系统管理员高效、可靠地完成漏洞排查与修复工作。
功能特性
- 自动检测操作系统与包管理器:支持 Debian/Ubuntu/Kali、RHEL/CentOS/Fedora/Rocky、openSUSE 等主流 Linux 发行版
- 精准版本识别:自动获取已安装的 xz-utils 版本,与已知漏洞版本(5.6.0、5.6.1)进行比对
- 智能升级修复:优先使用系统包管理器升级到最新安全版本,升级失败时自动从源码编译安装稳定版本(5.4.6)
- Ansible 规模化部署:提供完整的 Ansible Playbook,支持跨数百台服务器的批量检测与修复
- 交互式配置向导:Shell 脚本提供友好的命令行交互界面,支持自定义路径与执行选项
- 修复报告生成:自动生成详细的主机修复状态报告,便于审计与追踪
安装指南
单机 Shell 脚本
-
下载脚本
wget https://raw.githubusercontent.com/your-repo/ubuntu_security_hardening.sh chmod +x ubuntu_security_hardening.sh -
执行脚本
sudo ./ubuntu_security_hardening.sh
Ansible 批量部署
-
安装 Ansible(控制节点)
# Ubuntu/Debian sudo apt-get update && sudo apt-get install -y ansible # RHEL/CentOS sudo yum install -y ansible -
克隆项目
git clone https://github.com/your-repo/CVE-2024-3094-mitigation cd CVE-2024-3094-mitigation chmod +x setup_and_run_ansible_cve_fix.sh -
配置主机清单
编辑hosts.ini文件,添加需要检测的目标主机:[servers] 192.168.1.10 ansible_user=root 192.168.1.11 ansible_user=root -
运行自动化脚本
./setup_and_run_ansible_cve_fix.sh
使用说明
Shell 脚本单机使用
脚本会自动检测当前系统的 xz-utils 版本,如果发现漏洞版本(5.6.0 或 5.6.1),将执行以下流程:
- 尝试通过系统包管理器升级到最新版本
- 如果升级失败,自动下载 xz-5.4.6 稳定版源码并编译安装
- 提示用户是否重启系统以应用更改
# 执行检测与修复
sudo ./ubuntu_security_hardening.sh
# 输出示例
Detected vulnerable xz version: 5.6.0. Attempting to upgrade...
Attempting to upgrade xz to the latest version using apt-get...
xz has been successfully upgraded to the latest version.
It is recommended to reboot your system to apply changes. Would you like to reboot now? (yes/no)
Ansible Playbook 批量使用
方式一:自动交互式执行
运行 setup_and_run_ansible_cve_fix.sh 后,根据提示配置:
- 初始 Ansible 主机清单文件路径
- 受影响主机列表保存路径
- 是否自动执行修复 Playbook
- 最终报告保存路径
方式二:手动执行 Playbook
检测漏洞主机:
ansible-playbook -i path/to/hosts.ini check_vulnerability.yml
修复受影响主机:
ansible-playbook -i path/to/impacted_hosts.ini fix_vulnerable_hosts.yml
生成修复报告:
修复完成后,报告将保存到指定路径(默认为 ./remediation_report.txt),包含每台主机的修复状态与建议操作。
核心代码
Shell 脚本核心逻辑 - 版本检测与升级
# 检测操作系统并确定包管理器
detect_os_and_package_manager() {
if [[ -f /etc/debian_version ]] || grep -qi ubuntu /etc/os-release; then
PACKAGE_MANAGER="apt-get"
VERSION_COMMAND="apt-cache policy xz-utils | grep 'Installed:' | awk '{print \$2}'"
elif [[ -f /etc/redhat-release ]] || grep -qi centos /etc/os-release; then
if command -v dnf >/dev/null 2>&1; then
PACKAGE_MANAGER="dnf"
else
PACKAGE_MANAGER="yum"
fi
VERSION_COMMAND="$PACKAGE_MANAGER list installed xz | grep xz | awk '{print \$2}' | cut -d ':' -f 2"
fi
}
# 升级 xz-utils 到最新版本
upgrade_xz() {
echo "Attempting to upgrade xz to the latest version using $PACKAGE_MANAGER..."
case $PACKAGE_MANAGER in
apt-get|apt)
sudo $PACKAGE_MANAGER update && sudo $PACKAGE_MANAGER install -y xz-utils
;;
dnf|yum)
sudo $PACKAGE_MANAGER update -y xz
;;
esac
if [ $? -eq 0 ]; then
echo "xz has been successfully upgraded to the latest version."
return 0
else
echo "Failed to upgrade xz to the latest version."
return 1
fi
}
# 从源码编译安装稳定版本
install_stable_xz() {
echo "Downloading and installing the stable xz version from $STABLE_VERSION_URL..."
wget $STABLE_VERSION_URL -O "xz-$STABLE_VERSION.tar.bz2" && \
tar -xjf "xz-$STABLE_VERSION.tar.bz2" && \
cd "xz-$STABLE_VERSION" && \
./configure && make && sudo make install
}
# 主逻辑:检测漏洞版本并执行修复
CURRENT_VERSION=$(get_xz_version)
if [[ " ${VULNERABLE_VERSIONS[*]} " =~ " ${CURRENT_VERSION} " ]]; then
echo "Detected vulnerable xz version: $CURRENT_VERSION. Attempting to upgrade..."
if ! upgrade_xz; then
echo "Upgrade unsuccessful. Attempting to install a non-vulnerable version..."
install_stable_xz
fi
fi
Ansible Playbook 核心逻辑 - 批量检测
- name: Identify Vulnerable Hosts for CVE-2024-3094
hosts: all
become: yes
tasks:
- name: Gather package facts from all hosts
ansible.builtin.package_facts:
manager: auto
EOF
重要提醒
在生产环境部署前,请务必:
- 在测试环境中充分验证脚本或 Playbook 的行为
- 了解升级或降级 xz-utils 对系统上其他应用程序可能产生的影响
- 确保有完整的数据备份和回滚方案
- 仔细审查将要执行的变更,避免意外的业务中断 6HFtX5dABrKlqXeO5PUv/5Dq7l7h/nmTs89oAbrRTEdTobwJ8N381ruyQ41S2asr3EbOhAWrFvCmddhUpKhjGA==