cj667113/OCI-Ansible-Fix-CVE-2026-31431
GitHub: cj667113/OCI-Ansible-Fix-CVE-2026-31431
这是一个用于修复Oracle云中Linux实例CVE-2026-31431漏洞的Ansible playbook,通过自动化内核更新和验证来提升安全性。
Stars: 0 | Forks: 0
# CVE-2026-31431 Ansible 修复方案
本 playbook 用于修复 OCI 中 Linux 实例上的 CVE-2026-31431(亦称 Copy Fail)漏洞。
CVE-2026-31431 是 Linux 内核 `algif_aead` 实现中的一个本地权限提升问题,该实现被 AF_ALG 用户空间加密 API 使用。本 playbook 应用了主要的修复路径:安装更新后的供应商内核包并重启实例,使其运行修复后的内核。
参考资料:
- 国家漏洞数据库 (NVD):
- Copy Fail 披露:
## playbook 的功能
第一个 play 在 OCI Cloud Shell 或其他已配置 OCI CLI 的机器上本地运行。它通过读取每个实例、查找其主 VNIC,并根据 `prefer_public_ip` 设置选择私有或公有 IP 地址,将硬编码的 OCI 实例 OCID 解析为可访问的 Ansible 主机。
第二个 play 根据 Ansible 配置的 `forks` 限制,并行地对已解析的 Linux 主机进行补丁修复:
- 确认目标系统为 Linux。
- 使用 `uname -r` 获取当前正在运行的内核版本。
- 使用目标发行版的包管理器安装更新后的内核包:
- Oracle Linux、RHEL、Fedora、Amazon Linux: 使用 `dnf` 或 `yum` 更新 `kernel*` 和 `kernel-uek*`。
- Ubuntu 和 Debian: 使用 `apt-get --only-upgrade` 更新已安装的 Linux 内核包。
- SUSE: 使用 `zypper patch --category security`。
- 重启主机以实际运行更新后的内核。
- 获取重启后的内核版本。
- 验证正在运行的内核是否映射到一个已安装的内核包。
- 如果发行版的包管理工具仍然报告有待处理的内核更新,则使 play 失败。
- 在发行版提供相应数据的情况下,检查 CVE 特定的仓库公告或补丁元数据。
- 在可用的情况下,从已安装内核包的变更日志中收集 CVE 证据。
- 打印 RPM、Debian 系列和 SUSE 系统的已安装内核包信息。
- 打印所有目标的最终运行总结。
- 如果任何主机未通过验证,在打印完总结后使 playbook 失败。
## 验证过程
重启后,playbook 使用目标发行版的包和仓库工具来验证修复效果:
- RPM 系统:使用 `rpm` 映射正在运行的内核,使用 `dnf check-update` 或 `yum check-update` 检查待处理的内核更新,使用 `updateinfo` 检查 CVE 公告元数据,并搜索已安装内核包的变更日志。
- Ubuntu 和 Debian:使用 `dpkg-query` 映射正在运行的内核,使用 `apt-get` 模拟检查待处理的内核更新,并搜索已安装内核包的变更日志。
- SUSE:使用 `rpm` 映射正在运行的内核,使用 `zypper list-updates` 检查待处理的内核更新,使用 `zypper list-patches --cve` 检查 CVE 补丁元数据,并搜索已安装内核包的变更日志。
硬性的通过/失败检查标准是:主机在重启后运行的是由包管理器管理的内核,并且从已配置的仓库中没有剩余待处理的内核包更新。当发行版发布相关元数据时,会收集 CVE 特定的公告和变更日志输出。
在运行结束时,一个在 localhost 上执行的总结 play 会报告:
- 处理的目标总数
- 通过 CVE 检查的主机数
- 未通过或验证不完整的主机数
- 之前的内核
- 重启后安装/运行的内核
- 拥有运行中内核的包
- 包管理器内核检查结果
- 待处理内核更新检查结果
- CVE 公告或补丁元数据检查结果
默认输出是紧凑的每主机摘要。要同时打印完整的原始验证数据,请添加:
```
-e show_detailed_cve_evidence=true
```
## 运行
```
ansible-playbook -i localhost, patch_cve_2026_31431.yml \
-e oci_region=us-ashburn-1 \
-e ansible_user=opc \
-e ansible_ssh_private_key_file=/path/to/private_key \
-e prefer_public_ip=false
```
当 Cloud Shell 或您的 Ansible 控制主机必须通过公有 IP 地址访问实例时,请使用 `prefer_public_ip=true`。当控制主机具有私有网络可达性时,请使用 `prefer_public_ip=false`。
此 playbook 会为动态发现的目标禁用严格的 SSH 主机密钥检查,以便针对新解析的实例 IP 非交互式地运行。
## 预期结果
一次成功的运行应以 `CVE-2026-31431 verification passed for all targets.` 结束。总结部分会为每个字段打印一行,按 `Host: ...` 分组,包括之前的内核、重启后安装的内核、运行中的内核包(如 `kernel-uek-core-...`)以及 `CVE check: PASS`。如果由于仍存在可用的内核更新而导致验证失败,请确认主机可以访问正确的供应商安全仓库,然后重新运行 playbook。
标签:0day挖掘, Ansible自动化, Awesome, Cutter, CVE漏洞修复, Linux系统, OCI CLI, Oracle Cloud Infrastructure, 云基础设施, 内核安全, 包管理, 协议分析, 安全补丁, 本地权限提升, 权限提升, 漏洞修复, 系统提示词, 系统管理, 系统重启, 网络安全, 网络安全培训, 自动化运维, 隐私保护