1 - CVE-2021-25741

漏洞详情

这是一个权限访问相关的卷安全性问题。用户可以在创建的容器中通过 subpath 的卷挂载方式访问到该卷挂载目录之外的文件和目录,包括主机的文件系统。

漏洞影响

该漏洞影响 kubelet 相关行为,对于严格限制 hostPath 创建行为的集群管理员来说问题尤为严重。

漏洞评分

该漏洞为中危漏洞, CVSS 评分为 5.5。

防范措施

对于不想升级 kubelet 的用户来说,可以有两种防范措施:

  • 禁止 kubeletkube-apiserverVolumeSubpath 功能,并且移除所有正在使用该功能的 pod
  • 使用 admission control 防止信任度较低的用户使用 root 权限运行容器。

官方修复的版本

  • v1.22.2
  • v1.21.5
  • v1.20.11
  • v1.19.15

KLTS 修复的版本

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 修复的版本

3 - CVE-2020-8559

漏洞详情

这是 kube-apiserver 组件的安全漏洞,攻击者可以通过截取某些发送至节点 kubelet 的升级请求,通过请求中原有的访问凭据转发请求至其他目标节点,从而造成节点权限提升的漏洞。

漏洞影响

由于 kube-apiserver 在升级请求的代理后端中允许将请求传播回源客户端,所以攻击者可以通过截取某些发送至节点 kubelet 的升级请求,然后利用请求中原有的访问凭据转发请求至其他目标节点,从而造成被攻击节点出现权限提升的漏洞。

漏洞评分

该漏洞为中危漏洞, CVSS 评分为 6.4。 如果有多个集群共享使用了相同的 CA 和认证凭证,攻击者可以利用此漏洞攻击其他集群,这种情况下该漏洞为高危漏洞。

防范措施

对于集群内跨节点的攻击,建议您采取以下安全防范措施:

  • 及时吊销可能泄露的 kubeconfig 凭证,并且遵循权限最小化原则,收敛子账号不必要的 pods/execpods/attachpods/portforwardproxy 类型的资源模型 RBAC 权限。

官方修复的版本

  • v1.18.6
  • v1.17.9
  • v1.16.13

KLTS 修复的版本

4 - CVE-2020-8558

漏洞详情

kube-proxy 组件在 iptablesipvs 模式下均需要设置内核参数 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 中关闭 ContainerCAP_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-1002101CVE-2019-11246CVE-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 接口并不进行认证鉴权。所以如果 Kubelethealthz 地址未使用 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: truePod,在容器重启时或者如果镜像先前被拉到节点时,都将以 root(uid 0) 身份运行。

防范措施

Pod 指定 mustRunAsNonRoot: true

官方修复的版本

  • v1.14.3
  • v1.13.7

KLTS 修复的版本

12 - CVE-2019-11249

漏洞详情

此漏洞可能允许攻击者利用 kubectl cp 命令,采用路径遍历(Path Traversal)的方式将容器 tar 包中的恶意文件写入所在主机上的任何路径,该过程仅受本地用户的系统权限限制。

漏洞影响

该漏洞与不久前的 CVE-2019-1002101CVE-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
  • Kubernetes 1.14 以下
  • Kubernetes 1.21 及以上
    • 不受影响

KLTS 修复的版本