containerd 三条 Moderate 公告:拉镜像写满磁盘、checkpoint 恢复泄漏 mount、畸形 digest 打崩 daemon
2026-10-13,samuelkarp 一次性发布三条 Moderate 级别安全公告,修复版本为 2.4.2 / 2.3.7 / 2.2.10(第一条另含 2.0.14)。
一、镜像拉取没有字节上限,可写满主机磁盘
- 公告:GHSA-hc94-p972-ch66,CWE-400 资源耗尽,无 CVE 编号
- 致谢:Jakub Ciolek of AlphaSense
Impact:containerd 拉取镜像时把 layer 数据流式写入 content store,在按声明大小校验之前,没有对写入字节数设上限。拉取一个 crafted 镜像,或从恶意 registry 拉取,会让 containerd 持续写主机文件系统直到磁盘耗尽。在 Kubernetes 中这会触发 node disk pressure,使 kubelet 与 containerd 无响应,并阻塞新 Pod 启动。
Affected versions:>= 2.0.0, < 2.0.14、>= 2.2.0, < 2.2.10、>= 2.3.0, < 2.3.7、>= 2.4.0, < 2.4.2
Patched:2.4.2、2.3.7、2.2.10、2.0.14
Workarounds:用 Kubernetes ValidatingAdmissionPolicy 或 admission webhook 把 Pod 的镜像引用限制到受信任的 registry。
二、CRI checkpoint 恢复失败时泄漏 mount 与 snapshot
- 公告:GHSA-5p7c-hggf-c748,CWE-400 + CWE-772
Impact:containerd 的 CRI 插件在 Linux 上,当从 checkpoint 镜像恢复容器失败时,会泄漏只读 mount 和 pinned snapshot。反复从 metadata 畸形、或基础镜像无法拉取的 checkpoint 镜像创建容器,会无限耗尽主机 mount table 和磁盘空间。在 K8s 中会导致 containerd 与 kubelet 无法拉镜像或启动新 Pod。
Affected:>= 2.2.0, < 2.2.10、>= 2.3.0, < 2.3.7
Patched:2.2.10、2.3.7
Workarounds:升级后需要手动清理——把主机上残留的 /tmp/checkpoint* mount point umount(或重启节点),containerd 才能 GC 掉 pinned snapshot。
containerd 2.4 不支持通过 CRI 插件做 restore,不受影响。在 2.3 和 2.2 上,可以在配置里把 [plugins."io.containerd.cri.v1.runtime"] 下的 enable_criu = false(config version 2 则是 [plugins."io.containerd.grpc.v1.cri"]),或者确保 enable_experimental_restore_via_create = false(2.3.4/2.2.7 起是默认值)。同样建议把镜像引用限制到受信任 registry。
三、畸形 digest 导致 daemon panic
- 公告:GHSA-vwhp-8p66-mq4f
Impact:containerd 处理 image manifest 时,若 child descriptor 带有 io.containerd.manifest.subject 注解且 digest 畸形,会触发未恢复的 panic。通过 transfer service(包含默认 CRI 的 PullImage 请求)拉取或导入这种镜像会崩掉 containerd daemon。在 K8s 中 kubelet 会按 backoff 重试失败的镜像拉取,于是引用不可信镜像的 Pod 能反复把 containerd 打崩。
Affected:>= 2.2.0, < 2.2.10、>= 2.3.0, < 2.3.7、>= 2.4.0, < 2.4.2
Patched:2.4.2、2.3.7、2.2.10
Workarounds:限制 Pod 镜像引用到受信任 registry,只从可信来源拉取/导入镜像。
版本对照
| 公告 | 受影响区间 | 修复版本 |
|---|---|---|
| GHSA-hc94-p972-ch66 | >= 2.0.0, < 2.0.14、>= 2.2.0, < 2.2.10、>= 2.3.0, < 2.3.7、>= 2.4.0, < 2.4.2 | 2.0.14、2.2.10、2.3.7、2.4.2 |
| GHSA-5p7c-hggf-c748 | >= 2.2.0, < 2.2.10、>= 2.3.0, < 2.3.7 | 2.2.10、2.3.7 |
| GHSA-vwhp-8p66-mq4f | >= 2.2.0, < 2.2.10、>= 2.3.0, < 2.3.7、>= 2.4.0, < 2.4.2 | 2.2.10、2.3.7、2.4.2 |
三条公告的临时缓解手段基本一致:把 Pod 的镜像引用收窄到受信任的 registry。第二条还需要注意恢复失败后残留的 mount point 要手工清掉,否则 pinned snapshot 不会被 GC。