mrowkoob/copy-fail-mitigate-no-reboot
GitHub: mrowkoob/copy-fail-mitigate-no-reboot
针对 Copy Fail 内核漏洞(CVE-2026-31431)的免重启应急缓解脚本,通过禁用并卸载 algif_aead 模块临时阻断攻击路径。
Stars: 0 | Forks: 0
# copy-fail-mitigate
针对 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 概念验证(PoC)默认将目标定为 `/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
```
## 限制
此脚本不会:
* 修补内核;
* 验证当前运行的内核是否存在漏洞;
* 保证驱逐所有相关的页缓存状态;
* 检查所有 setuid 二进制文件;
* 替代厂商的安全更新;
* 提供容器或沙箱加固。
对于不受信任的工作负载(例如容器、沙箱、CI 运行器和多用户主机),
建议采取额外的加固措施,例如使用 seccomp 阻止创建 `AF_ALG` 套接字。
## 参考
* [https://copy.fail/#mitigation](https://copy.fail/#mitigation)
标签:0day挖掘, algif_aead, Copy Fail, Cutter, CVE-2026-31431, Linux内核, modprobe, PB级数据处理, posix_fadvise, Python, rmmod, setuid, Shell脚本, su命令, Web报告查看器, 免重启修复, 内核安全, 内核模块, 协议分析, 安全漏洞, 安全资源, 安全运维, 库, 应急响应, 无后门, 本地提权, 权限提升, 漏洞修复, 漏洞缓解, 热补丁, 系统加固, 网络安全培训, 逆向工具, 页面缓存