快速摘要
- Docker 团队已发布针对 Copy Fail(CVE-2026-31431) 漏洞的缓解措施。
- 要防范 Copy Fail 漏洞,应升级至 Docker Engine v29.4.3 或更高版本。
- 此修补版本采用纵深防御策略,使用 AppArmor 和 SELinux 阻止创建
AF_ALG套接字,这是漏洞利用所需的具体系统调用接口。
引言
如果你使用 Linux,可能已经听说过最近影响众多 Linux 系统的严重安全漏洞 Copy Fail(CVE-2026-31431)。该缺陷影响自 2017 以来构建的几乎所有 Linux 系统。
由于 Docker 与 Linux 系统共享内核,此漏洞也会危及容器安全。幸运的是,Docker 团队已发布针对 Copy Fail 漏洞的修复。
什么是 Copy Fail 漏洞?
Copy Fail(CVE-2026-31431) 是一个高严重性的 Linux 内核逻辑缺陷,允许无特权的本地用户通过向系统的页缓存写入四个受控字节来获取 root 权限或逃逸容器。
通俗地说,Copy Fail 是 Linux 处理加密数据时的一个数学错误。普通用户可以利用此逻辑错误向页缓存写入数据。由于页缓存存储文件在内存中的副本,攻击者可以“更改”文件而无需实际接触磁盘。
例如,黑客可以更改系统文件以授予自己“root”权限。在 Docker 环境中,单个受感染的容器可能攻击整个主机或其他容器。
该漏洞由 Xint Code 的研究人员发现,利用内核的加密子系统,影响自 2017 以来发布的几乎所有主流 Linux 发行版。
Copy Fail 的一个令人惊讶的特点是它的隐蔽性。它完全对磁盘取证分析不可见。因为恶意写入绕过了标准的虚拟文件系统(VFS)路径,损坏的数据仅存在于 RAM 中,从未写入物理磁盘。
因此,磁盘的取证镜像将显示原始干净的文件,一旦系统重启或页缓存被驱逐,损坏完全消失,不留痕迹。
Docker 如何保护你
该漏洞利用依赖于一种称为 AF_ALG 套接字的特定连接类型。为了阻止攻击,Docker 需要阻止容器创建这些连接。
首次尝试(v29.4.2)
最初,Docker 尝试使用名为 seccomp 的工具阻止这些套接字。然而,此版本也阻止了一个名为 socketcall 的旧系统工具。虽然这阻止了漏洞,但意外破坏了 32 位应用程序、Go 程序和旧游戏的网络功能。
更好的修复(v29.4.3)
Docker 版本 v29.4.3 修复了这些问题。它没有过度阻止,而是使用更智能的安全层,如 AppArmor 和 SELinux。这些工具专门阻止“Copy Fail”连接,而不会破坏你的 32 位应用程序。
应用 Docker Copy Fail 缓解措施的步骤
要保护你的 Docker 容器免受 Copy Fail 漏洞利用,请执行以下步骤:
1. 更新 Linux 内核
这是修复漏洞根本原因的唯一方法。请检查你的 Linux 发行版以获取最新的安全补丁。
主流 Linux 发行版已发布修复 Copy Fail 漏洞的补丁。要应用修复,只需更新系统并重启。
Ubuntu / Debian
sudo apt update && sudo apt full-upgrade -y
sudo reboot
Fedora
Fedora 的内核修复参考版本为 Kernel 7.0.4。
sudo dnf upgrade --refresh -y
sudo reboot
RHEL / AlmaLinux / Rocky Linux
sudo dnf update -y
sudo reboot
CentOS Stream
sudo dnf upgrade -y
sudo reboot
Arch Linux
sudo pacman -Syu
sudo reboot
openSUSE
sudo zypper refresh
sudo zypper update -y
sudo reboot
Alpine Linux
sudo apk update
sudo apk upgrade
sudo reboot
2. 升级 Docker Engine
如果无法立即修补内核,Docker 已在 Docker Engine v29.4.3 及更高版本中发布了缓解措施。
$ sudo docker version
[sudo: authenticate] Password:
Client: Docker Engine - Community
Version: 29.5.2
API version: 1.54
Go version: go1.26.3
Git commit: 79eb04c
Built: Wed May 20 14:38:06 2026
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 29.5.2
API version: 1.54 (minimum version 1.40)
Go version: go1.26.3
Git commit: 568f755
Built: Wed May 20 14:38:06 2026
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v2.2.4
GitCommit: 193637f7ee8ae5f5aa5248f49e7baa3e6164966e
runc:
Version: 1.3.5
GitCommit: v1.3.5-0-g488fc13e
docker-init:
Version: 0.19.0
GitCommit: de40ad0
即使无法立即重启整个服务器,这也提供了重要的防御层。
然而,仍然强烈建议更新 Linux 内核并重启系统。
3. 黑名单模块
如果无法立即更新系统,可以手动禁用受影响的内核部分。可以通过将 blacklist af_alg 添加到系统的模块设置中来实现。
最后
现在有了 Docker 的缓解措施来帮助防范 Copy Fail(CVE-2026-31431)漏洞。如果无法立即修补主机内核,应升级至 Docker Engine v29.4.3 或更高版本。
然而,仍然强烈建议更新主机内核并重启系统。通过同时更新内核和 Docker Engine,可以保护系统免受多个严重的**本地权限提升(LPE)**漏洞的攻击。



