针对 Copy Fail / CVE-2026-31431 的最小化免重启缓解辅助脚本。
该脚本会禁用存在漏洞的 algif_aead 模块路径,并尝试立即卸载该模块。同时,它还会尽力对 /usr/bin/su 执行页缓存回收。
这只是缓解措施,并非内核修复。请尽快安装厂商提供的已修补内核。
该脚本执行 Copy Fail 公开公告所建议的缓解操作:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || true
这样可以防止 algif_aead 通过 modprobe 被再次加载,并在可能的情况下将其从运行中的内核中卸载。
随后,脚本会运行一小段 Python 代码,对 /usr/bin/su 的第一页调用带有 POSIX_FADV_DONTNEED 参数的 posix_fadvise():
os.posix_fadvise(fd, 0, page, os.POSIX_FADV_DONTNEED)
这是尽力从页缓存中回收相关页面的尝试。它不能替代内核补丁,也无法保证清理所有可能被攻击的 setuid 二进制文件。
/usr/bin/su?公开的 Copy Fail 概念验证默认以 /usr/bin/su 为攻击目标。因此,该脚本在禁用漏洞模块路径后,会尝试将 /usr/bin/su 的第一页从页缓存中移除。
如果你的环境中存在针对其他 setuid 二进制文件的已测试或疑似攻击行为,请相应审查并调整脚本。
请先审查脚本内容。
sudo ./mitigate-copy-fail.sh
检查模块是否已卸载:
lsmod | grep '^algif_aead' || echo "algif_aead is not loaded"
检查 modprobe 规则是否存在:
cat /etc/modprobe.d/disable-algif.conf
预期输出:
install algif_aead /bin/false
尝试手动加载模块:
sudo modprobe algif_aead
该操作应失败或拒绝加载。
仅在安装已修复内核或接受相关风险后,才执行回滚操作。
sudo rm -f /etc/modprobe.d/disable-algif.conf
sudo modprobe algif_aead
该脚本不会:
对于容器、沙箱、CI 运行器等不受信任的工作负载以及多用户主机,建议采取额外加固措施,例如使用 seccomp 阻止 AF_ALG 套接字的创建。