修复的漏洞
- 1: CVE-2021-25741
- 2: CVE-2021-3121
- 3: CVE-2020-8559
- 4: CVE-2020-8558
- 5: CVE-2020-8552
- 6: CVE-2019-1002101
- 7: CVE-2019-11251
- 8: CVE-2019-11248
- 9: CVE-2019-11247
- 10: CVE-2019-11246
- 11: CVE-2019-11245
- 12: CVE-2019-11249
- 13: nokmem
1 - CVE-2021-25741
漏洞详情这是一个权限访问相关的卷安全性问题。用户可以在创建的容器中通过 subpath
的卷挂载方式访问到该卷挂载目录之外的文件和目录,包括主机的文件系统。
漏洞影响
该漏洞影响 kubelet
相关行为,对于严格限制 hostPath
创建行为的集群管理员来说问题尤为严重。
漏洞评分
该漏洞为中危漏洞, CVSS
评分为 5.5。
防范措施
对于不想升级 kubelet
的用户来说,可以有两种防范措施:
- 禁止
kubelet
,kube-apiserver
的VolumeSubpath
功能,并且移除所有正在使用该功能的pod
。 - 使用
admission control
防止信任度较低的用户使用root
权限运行容器。
官方修复的版本
- v1.22.2
- v1.21.5
- v1.20.11
- v1.19.15
KLTS 修复的版本
- v1.18.20-lts.1 kubernetes/kubernetes#104253
- v1.17.17-lts.1 TODO
- v1.16.15-lts.1 TODO
- v1.15.12-lts.1 TODO
- v1.14.10-lts.1 TODO
- v1.13.12-lts.1 TODO
- v1.12.10-lts.1 TODO
- v1.11.10-lts.1 TODO
- v1.10.13-lts.1 TODO
2 - CVE-2021-3121
漏洞详情存在该漏洞的程序可能会因为处理了包含恶意 Protobuf
消息而崩溃。如果您使用的 Gogo Protobuf
版本过低,可能存在该漏洞。
漏洞影响
Kubernetes
系统组件由于自身有应对崩溃的恢复机制,当遇到恶意提交的 Protobuf
消息时不会中断服务,所以不在该漏洞的影响范围内。
在应用系统中程序接收处理 Protobuf
消息时,如果组件没有应对崩溃的恢复机制,那么这类程序都在该漏洞影响范围内,且被恶意攻击时服务可能会中断。
Kubernetes
社区经过测试验证 API Server
不受该漏洞的影响,但为了避免您受到该安全漏洞隐患的影响,社区对相关 Protobuf
文件进行了升级。
防范措施
如果在您的应用系统代码中使用了自动生成的 Protobuf
消息,并且发现相关组件因为以下异常退出,则可能存在该漏洞。
panic: runtime error: index out of range [-9223372036854775804]
goroutine 1 [running]:
v1.(*MessageName).Unmarshal(0xc00006f1e8, 0xc0000281a8, 0xa, 0x10, 0xc00006f1b8, 0x1)
.../protofile.pb.go:250 +0xb86
如果您使用了 Protobuf
消息的相关组件,推荐将 Gogo Protobuf
编译器升级到漏洞修复版本(v1.3.2 或更高的版本),再基于升级后的 Protobuf
编译器重新生成相关的 Protobuf
消息。
官方修复的版本
- v1.21.1
- v1.20.7
- v1.19.11
- v1.18.19
KLTS 修复的版本
- v1.17.17-lts.1 kubernetes/kubernetes#101327
- v1.16.15-lts.1 kubernetes/kubernetes#101327
- v1.15.12-lts.1 kubernetes/kubernetes#101327
- v1.14.10-lts.1 kubernetes/kubernetes#101327
- v1.13.12-lts.1 kubernetes/kubernetes#101327
- v1.12.10-lts.1 kubernetes/kubernetes#101327
- v1.11.10-lts.1 kubernetes/kubernetes#101327
- v1.10.13-lts.1 kubernetes/kubernetes#101327
3 - CVE-2020-8559
漏洞详情这是 kube-apiserver
组件的安全漏洞,攻击者可以通过截取某些发送至节点 kubelet
的升级请求,通过请求中原有的访问凭据转发请求至其他目标节点,从而造成节点权限提升的漏洞。
漏洞影响
由于 kube-apiserver
在升级请求的代理后端中允许将请求传播回源客户端,所以攻击者可以通过截取某些发送至节点 kubelet
的升级请求,然后利用请求中原有的访问凭据转发请求至其他目标节点,从而造成被攻击节点出现权限提升的漏洞。
漏洞评分
该漏洞为中危漏洞, CVSS
评分为 6.4。
如果有多个集群共享使用了相同的 CA
和认证凭证,攻击者可以利用此漏洞攻击其他集群,这种情况下该漏洞为高危漏洞。
防范措施
对于集群内跨节点的攻击,建议您采取以下安全防范措施:
- 及时吊销可能泄露的
kubeconfig
凭证,并且遵循权限最小化原则,收敛子账号不必要的pods/exec
、pods/attach
、pods/portforward
和proxy
类型的资源模型RBAC
权限。
官方修复的版本
- v1.18.6
- v1.17.9
- v1.16.13
KLTS 修复的版本
4 - CVE-2020-8558
漏洞详情kube-proxy
组件在 iptables
和 ipvs
模式下均需要设置内核参数 net.ipv4.conf.all.route_localnet=1
, 从而允许本地回环访问。攻击者可能通过共享主机网络的容器,或在集群节点访问同一个 LAN 或二层网络下的相邻节点上绑定监听本地 127.0.0.1
端口的 TCP/UDP 服务,从而获取接口信息。如果您的服务没有设置必要的安全认证,可能会造成信息泄露风险。
漏洞影响
当攻击者拥有主机网络配置能力或运行在一个具备了 CAP_NET_RAW
能力的容器实例时,就可以获取在目标节点上监听 127.0.0.1
的服务 socket
信息。如果在目标主机上存在 127.0.0.1
可以访问且不需要任何认证鉴权的暴露服务,那么该服务信息就能被攻击者获取。
漏洞评分
- 如果集群
API Server
开启了非认证端口(默认 8080),那么攻击者可能获取到API Server
接口相关信息,威胁等级为高危漏洞,评分为 8.8 分。 - 如果集群
API Server
默认关闭了非认证端口,威胁等级为中危漏洞,评分为 5.4 分。
防范措施
建议您采取以下安全防范措施:
如果业务容器需使用主机网络模式且又在非安全端口上监听,则可以通过在节点上手动添加 iptables
规则来缓解此漏洞。
执行以下命令在集群中配置 iptables
规则,用于拒绝非本地对 127.0.0.1
的访问流量:
iptables -I INPUT --dst 127.0.0.0/8 ! --src 127.0.0.0/8 -m conntrack ! --ctstate RELATED,ESTABLISHED,DNAT -j DROP
如果集群不需要开启 API Server 不安全端口,可以将 --insecure-port=0
添加到 kubernetes API 服务器命令行来禁用端口。
如集群内运行不受信任的容器,可以禁止 Container
开启 CAP_NET_RAW
能力,在 pod spec
中关闭 Container
的 CAP_NET_RAW
能力。
securityContext:
capabilities:
drop:
- "NET_RAW"
通过 PodSecurityPolicy
策略限制部署特权或共享主机网络容器,另外可以通过在策略中配置 requiredDropCapabilities
强制容器部署关闭 CAP_NET_RAW
能力。
官方修复的版本
- v1.18.4
- v1.17.7
- v1.16.11
KLTS 修复的版本
5 - CVE-2020-8552
漏洞详情此漏洞可能使 API Server
易于遭受 API
请求成功造成的 DoS
(拒绝服务攻击)。
漏洞影响
API Server
易于遭受 API
请求成功造成的 DoS
(拒绝服务攻击)。
官方修复的版本
- v1.17.3
- v1.16.7
- v1.15.10
KLTS 修复的版本
6 - CVE-2019-1002101
漏洞详情此漏洞可能允许攻击者在 kubectl cp
命令执行解压过程中修改或监控符号链接头同名目录下的任意文件,从而造成破坏。
漏洞影响
kubectl cp
命令允许用户在容器和用户机器之间拷贝文件,攻击者可能通过在镜像或运行容器中植入带有符号链接(symbolic links)头的恶意 tar
包,在 cp
命令执行解压过程中修改或监控符号链接头同名目录下的任意文件,从而造成破坏。
官方修复的版本
- v1.14.1
- v1.13.6
- v1.12.8
- v1.11.10
KLTS 修复的版本
7 - CVE-2019-11251
漏洞详情此漏洞可能允许攻击者利用 kubectl cp
命令,采用路径遍历(Path Traversal)的方式将容器 tar
包中的恶意文件写入所在主机上的任何路径,该过程仅受本地用户的系统权限限制。
漏洞影响
该漏洞与不久前的 CVE-2019-1002101、CVE-2019-11246、CVE-2019-11249 漏洞影响相似。
kubectl cp
命令用于用户容器和主机之间的文件拷贝,当从容器中拷贝文件时,Kubernetes
首先会在容器中执行 tar
命令创建相应的归档文件,然后发送给客户端,然后 kubectl
会在用户主机上进行相应解压操作。
如果容器 tar
包中包含恶意文件,当攻击者具有 kubectl cp
命令的执行权限时,可以利用路径遍历(Path Traversal)。
官方修复的版本
- v1.15.4
- v1.14.7
- v1.13.11
KLTS 修复的版本
8 - CVE-2019-11248
漏洞详情可以通过健康检查的端口访问 /debug/pprof
。
漏洞影响
该漏洞存在于 Kubelet
中,用于性能调试的 /debug/pprof
跟健康检查端口 /healthz
绑定在一起,其中 /debug/pprof
会进行安全认证,但 /healthz
接口并不进行认证鉴权。所以如果 Kubelet
的 healthz
地址未使用 localhost
,则会存在泄露机器敏感信息的风险。
官方修复的版本
- v1.14.4
- v1.13.8
- v1.12.10
KLTS 修复的版本
9 - CVE-2019-11247
漏洞详情API Server
允许通过错误的范围访问自定义的资源。
漏洞影响
如果某个用户请求的资源已划分到命名空间,Kubernetes kube-apiserver 将错误地允许该用户访问集群范围内的自定义资源。
以这种方式访问资源将等同于授予命名空间内所有角色及其权限,这意味着本来只能访问命名空间中一个资源的用户将能够创建、查看、更新或删除整个集群范围的资源(具体取决于其命名空间角色权限)。
官方修复的版本
- v1.12.12
KLTS 修复的版本
10 - CVE-2019-11246
漏洞详情此漏洞可能允许攻击者利用 kubectl cp
命令,采用路径遍历 (Path Traversal) 的方式将容器 tar
包中的恶意文件写入所在主机上的任何路径,该过程仅受本地用户的系统权限限制。
漏洞影响
该漏洞与不久前的 CVE-2019-1002101 漏洞影响相似。
kubectl cp
命令用于用户容器和主机之间的文件拷贝。当从容器中拷贝文件时,Kubernetes
首先会在容器中执行 tar
命令创建相应的归档文件,然后发送给客户端,kubectl
会在用户主机上进行相应解压操作。
如果容器 tar
包中包含恶意文件,当攻击者具有 kubectl cp
命令的执行权限时,可以利用路径遍历 (Path Traversal) 方式将恶意文件写入任意路径。
官方修复的版本
- v1.14.3
- v1.13.7
- v1.12.10
KLTS 修复的版本
11 - CVE-2019-11245
漏洞详情这是一个提权漏洞,通常以容器 Dockerfile
中指定的 USER
运行的容器,在容器重启时或者如果镜像先前被拉到节点时,都将以 root
(uid 0) 身份运行。
漏洞影响
所有未指定 mustRunAsNonRoot: true
的 Pod
,在容器重启时或者如果镜像先前被拉到节点时,都将以 root
(uid 0) 身份运行。
防范措施
为 Pod
指定 mustRunAsNonRoot: true
。
官方修复的版本
- v1.14.3
- v1.13.7
KLTS 修复的版本
12 - CVE-2019-11249
漏洞详情此漏洞可能允许攻击者利用 kubectl cp
命令,采用路径遍历(Path Traversal)的方式将容器 tar
包中的恶意文件写入所在主机上的任何路径,该过程仅受本地用户的系统权限限制。
漏洞影响
该漏洞与不久前的 CVE-2019-1002101、CVE-2019-11246 漏洞影响相似。
kubectl cp
命令用于用户容器和主机之间的文件拷贝,当从容器中拷贝文件时,Kubernetes
首先会在容器中执行 tar
命令创建相应的归档文件,然后发送给客户端,然后 kubectl
会在用户主机上进行相应解压操作。
如果容器 tar
包中包含恶意文件,当攻击者具有 kubectl cp
命令的执行权限时,可以利用路径遍历 (Path Traversal)。
官方修复的版本
- v1.15.2
- v1.14.5
- v1.13.9
KLTS 修复的版本
13 - nokmem
Bug 详情节点磁盘充足但是一直报磁盘不足无法创建 Pod
。
Bug 影响
节点长期使用的时候提示剩余空间不足的错误,报错信息如下所示:
mkdir: cannot create directory '/sys/fs/cgroup/memory/8': No space left on device
节点磁盘充足但是一直报和这个错误, 并且创建 Pod
总是失败,这是一个潜在的“定时炸弹”。
所有使用低版本内核的环境以及 Kubernetes 1.21 之前的版本都会受到影响,在 runc 1.0.0-rc94 (opencontainers/runc#2840) 进行了修复(被直接移除)。
防范措施
- 升级系统内核
- Kubernetes 1.14 到 1.20
- 重新构建 Kubelet 带上
-tags=nokmem
- 重新构建 Kubelet 带上
- Kubernetes 1.14 以下
- 有关硬编码,请参考 nokmem.1.13.patch
- Kubernetes 1.21 及以上
- 不受影响
KLTS 修复的版本
- /docs/kubernetes/releases/v1.20/v1.20.15-lts.1/ nokmem.1.20.patch
- /docs/kubernetes/releases/v1.19/v1.19.16-lts.1/ nokmem.1.20.patch
- v1.18.20-lts.1 nokmem.1.20.patch
- v1.17.17-lts.1 nokmem.1.20.patch
- v1.16.15-lts.1 nokmem.1.20.patch
- v1.15.12-lts.1 nokmem.1.20.patch
- v1.14.10-lts.1 nokmem.1.20.patch
- v1.13.12-lts.1 nokmem.1.13.patch
- v1.12.10-lts.1 nokmem.1.13.patch
- v1.11.10-lts.1 nokmem.1.13.patch
- v1.10.13-lts.1 nokmem.1.13.patch