当前状态:2019 年 Kubernetes 第三方安全审计

我们预计最新的 Kubernetes 第三方安全审计报告将于本月晚些时候(2022 年 10 月)发布。

为此,让我们回顾一下上次 2019 年第三方安全审计中公开的发现,该审计基于 Kubernetes v1.13.4

动机

Craig Ingram 多年来一直在努力跟进上次审计报告中发现的问题状态,具体见此 issue:kubernetes/kubernetes#81146。本博客文章将尝试更深入地探讨这一点,解决跟踪中的任何差距,并成为对 2019 年报告的发现状态的一个时间点总结。

本文还应通过透明的沟通,帮助读者建立信心,了解社区为解决这些发现所做的工作,并提出任何需要社区贡献者帮助的发现。

当前状态

此处每个问题/发现的状态均以尽力而为的方式呈现。作者不声称状态 100% 准确,如果当前状态未能准确反映,欢迎通过直接在相关问题上发表评论的方式提出任何更正或反馈。

#标题问题状态
1hostPath PersistentVolumes 导致 PodSecurityPolicy 可被绕过#81110已关闭,由 kubernetes/website#15756kubernetes/kubernetes#109798 解决
2Kubernetes 不支持证书吊销#81111#18982 的重复项,需要 KEP
3HTTPS 连接未经身份验证#81112很大程度上留给最终用户自行配置
4通过 kubelet 将 PID 移动到 manager 的 cgroup 时存在 TOCTOU#81113成功利用需要节点访问权限。需要修复
5kubectl cp 中未正确修补的目录遍历问题#76788已关闭,分配了 CVE-2019-11249,在 #80436 中修复
6Bearer 令牌在日志中泄露#81114已关闭,分配了 CVE-2019-11250,在 #81330 中修复
7Seccomp 默认禁用#81115已关闭,由 #101943 解决
8普遍存在的可被全局访问的文件权限#81116#112384 (进行中)
9环境变量暴露敏感数据#81117已关闭,由 #84992#84677 解决
10SSH 连接中使用 InsecureIgnoreHostKey#81118此功能已在 v1.22 中移除:#102297
11使用 InsecureSkipVerify 和其他 TLS 弱点#81119需要 KEP
12kubeadm 执行了可能危险的重置操作#81120已关闭,由 #81495#81494kubernetes/website#15881 修复
13使用 strconv.Atoi 并向下转型结果时发生溢出#81121已关闭,由 #89120 修复
14kubelet 可能因恶意清单导致内存不足错误#81122已关闭,由 #76518 修复
15kubectl 可能因恶意的 Pod 规约导致内存不足错误#81123需要修复
16不正确的 PID 获取导致错误的 cgroup 移动#81124需要修复
17运行 kube-apiserver 和 kubelet 的主机日志存在目录遍历问题#81125已关闭,由 #87273 修复
18非恒定时间的密码比较#81126已关闭,由 #81152 修复
19加密建议不符合最佳实践#81127进行中
20默认向容器添加凭据不安全#81128已关闭,由 #89193 修复
21kubelet 存活探针可用于枚举主机网络#81129需要 KEP
22iSCSI 卷存储在日志中以明文形式存储 Secret#81130已关闭,由 #81215 修复
23硬编码的凭据路径#81131已关闭,等待更多证据
24日志轮转非原子操作#81132需要修复
25无边界的任意文件路径#81133需要修复。
26不安全的 JSON 构造#81134部分修复
27因错误处理不当导致 kubelet 崩溃#81135已关闭。由 #81135 修复
28旧版令牌永不过期#81136已关闭,作为 #70679 的一部分修复
29CoreDNS 在命名空间之间泄露内部集群信息#81137已关闭,随 CoreDNS v1.6.2 解决。#81137 (评论)
30服务使用有问题的默认函数#81138需要修复
31容器管理器中 docker 守护进程名称不正确#81139已关闭,由 #81083 修复
32在所有地方使用标准格式#81140需要 KEP
33肤浅的健康检查提供了虚假的安全感#81141已关闭,由 #81319 修复
34硬编码使用不安全的 gRPC 传输#81142需要 KEP
35Retry-After 处理不正确#81143已关闭,由 #91048 修复
36不正确的 isKernelPid 检查#81144已关闭,由 #81086 修复
37Kubelet 支持不安全的 TLS 密码套件#81145已关闭但 #91444 需要修复 (见此评论)

启发的成果

除了修复具体问题外,2019 年的第三方安全审计还推动了 Kubernetes 接下来几个版本中以安全为重点的增强。其中一个例子是 Kubernetes 增强提案(KEP)1933 通过静态分析防止日志记录 Secret,以防止通过日志泄露 Secret,由 Patrick Rhomberg 推动实现。由于此 KEP,go-flow-levee,一个配置用于检测 Secret 日志记录的污点传播分析工具,在一个 脚本中作为 Prow 的预提交作业执行。此 KEP 在 v1.20.0 中作为 Alpha 功能引入,然后在 v1.21.0 中升级为 Beta,并在 v1.23.0 中升级为稳定版。作为稳定版,该分析作为阻塞性的预提交测试运行。此 KEP 还帮助解决了 2019 年第三方安全审计中的以下问题:

剩余工作

过去 3 年来,我们社区成员的工作修复了已发现的 37 个问题中的许多。但是,我们仍有一些工作要做。以下是剩余工作的分解,包括对修复这些待处理问题的时间投入、复杂性和对生态系统益处的粗略估计。

标题问题时间投入复杂性对生态系统的益处
Kubernetes 不支持证书吊销#81111
使用 InsecureSkipVerify 和其他 TLS 弱点#81119
kubectl 可能因恶意的 Pod 规约导致本地内存不足错误#81123
不正确的 PID 获取导致错误的 cgroup 移动#81124
kubelet 存活探针可用于枚举主机网络#81129
API Server 支持不安全的 TLS 密码套件#81145
通过 kubelet 将 PID 移动到 manager 的 cgroup 时存在 TOCTOU#81113
日志轮转非原子操作#81132
无边界的任意文件路径#81133
服务使用有问题的默认函数#81138
在所有地方使用标准格式#81140非常低
硬编码使用不安全的 gRPC 传输#81142非常低

要开始修复这些需要帮助的任何问题,请考虑加入我们的双周会议或在我们的 Slack 频道与我们交流,参与 Kubernetes SIG Security