CVE-2024-21626 是 runc 组件中的高危容器逃逸漏洞,CVSS 评分为 8.6。
漏洞原理:runc 1.1.11 及之前版本在执行容器初始化过程中存在内部文件描述符(/sys/fs/cgroup 目录)泄漏问题。攻击者可通过构造特殊镜像,在容器启动时将工作目录(WORKDIR)设置为 /proc/self/fd/7 等路径,将新容器进程的工作目录切入到宿主机文件系统命名空间,从而突破容器隔离限制,实现:
访问宿主机文件系统
读取、修改宿主机敏感文件
执行宿主机上的二进制程序
利用条件:需要内核支持 openat2 系统调用(Kernel >= 5.6),且攻击者需要具备提供自定义镜像或控制容器工作目录的权限
表格
复制
| 组件 | 受影响版本 | 安全版本 |
|---|---|---|
| runc | 1.0.0-rc93 ≤ version ≤ 1.1.11 | ≥ 1.1.12 |
受影响平台:
Docker(使用 runc 作为默认运行时)
Kubernetes(使用 containerd、CRI-O 等调用 runc)
下面以主节点为例进行升级步骤说明,如果是多节点的话,需要每台机器都进行升级,升级完成之后在主节点上执行kb get pod确认容器是否正常就行了。
runc --version```shell
[root@master-192-168-0-120 plugin]# runc --version
runc version 1.1.4 <-- 小于1.1.12,有漏洞
commit: v1.1.4-0-g5fd4c4d
spec: 1.0.2-dev
go: go1.17.13
libseccomp: 2.3.1
```
whereis runc```shell
[root@master-192-168-0-120 plugin]# whereis runc
runc: /usr/bin/runc
```
kubelet和docker服务```shell
[root@master-192-168-0-120 ~]# systemctl stop kubelet
[root@master-192-168-0-120 ~]# systemctl stop docker
```
runc.amd64上传到服务器上,比如/tmp目录,然后把老版本的runc给备份下,用新的runc.amd64替换老的runc,确认新的runc版本已经升级到1.1.12```shell
[root@master-192-168-0-120 ~]# mv /usr/bin/runc /tmp/runc.bak
[root@master-192-168-0-120 ~]# mv /tmp/runc.amd64 /usr/bin/runc
[root@master-192-168-0-120 ~]# chmod +x /usr/bin/runc
[root@master-192-168-0-120 ~]# ll /usr/bin/runc
-rwxr-xr-x. 1 root root 10709696 Jan 28 10:12 /usr/bin/runc
[root@master-192-168-0-120 ~]# runc --version
runc version 1.1.12 <-- 该版本已修复漏洞
commit: v1.1.12-0-g51d5e946
spec: 1.0.2-dev
go: go1.20.13
libseccomp: 2.5.4
```
docker和kubelet服务 ,服务重启需要10多分钟左右。```shell
[root@master-192-168-0-120 ~]# systemctl restart docker
[root@master-192-168-0-120 ~]# systemctl restart kubelet
```
```shell
[root@master-192-168-0-120 ~]# kb get pod
NAME READY STATUS RESTARTS AGE
df-aiadaptor-5d59c48b84-kql8z 3/3 Running 4 (5m45s ago) 10h
df-biconnector-79f86c4485-hqk2p 1/1 Running 1 (5m45s ago) 10h
df-biserver-7c7594f595-cb6z2 1/1 Running 1 (5m45s ago) 10h
df-biworker-556b47f6f-vzbnj 2/2 Running 2 (5m45s ago) 10h
df-hadoop-datanode-857856dd57-76lsh 1/1 Running 11 (5m44s ago) 42d
df-hadoop-namenode-54bd98d495-4l4df 1/1 Running 2 (5m44s ago) 42d
df-hadoop-secondary-namenode-65896598cb-k65q9 1/1 Running 2 (5m44s ago) 42d
df-hive-6fdfc7b4db-nw7mc 2/2 Running 6 (5m44s ago) 41d
df-kudu-master-0 1/1 Running 6 (5m55s ago) 42d
df-kudu-tserver-0 1/1 Running 6 (5m55s ago) 42d
df-nginx-7cb96b8647-677tl 1/1 Running 1 (5m45s ago) 10h
df-nodeexporter-wz5q8 1/1 Running 1 (5m55s ago) 42d
df-pgsql-0 1/1 Running 9 (5m55s ago) 42d
df-qdrant-0 1/1 Running 3 (5m55s ago) 42d
df-rabbitmq-cluster-0 1/1 Running 1 (5m45s ago) 8d
df-redis-5ff6d8c6cb-v6wlq 1/1 Running 3 (5m55s ago) 42d
df-search-74c59fbb64-frgvf 1/1 Running 1 (5m45s ago) 10h
df-sysmgr-59d5776b6b-znr5t 1/1 Running 1 (5m45s ago) 10h
df-taskmgr-8696f559b7-g54cp 1/1 Running 1 (5m45s ago) 10h
df-trino-coordinator-7c758f794b-xrx4b 1/1 Running 1 (5m42s ago) 30d
df-trino-worker-6fd7ff4fc8-d6lr6 1/1 Running 1 (5m41s ago) 30d
df-webserver-7b5c664dcc-kbh7r 1/1 Running 1 (5m45s ago) 10h
```
runc.rar
3.13MB