华为云用户手册

  • 漏洞影响 containerd创建容器时默认把 Linux Process capabilities配置到 Inheritable 集合上,这会导致在容器内的进程在以 Non-Root 用户 execve() 执行可执行文件时Inheritable和文件的Inheritable集合的交集被添加到执行完execve后的进程的Permited集合中,出现非预期的“越权“行为。需要说明的是,这个越权并没有突破 execve 前的进程权限,仅仅是继承之前的 capabilities。 该漏洞的影响范围如下: 1. CCE Turbo 集群,使用了低于1.4.1-98版本的containerd作为kuberentes CRI运行时。 2. CCE集群containerd版本低于1.5.11以下的集群。
  • 参考链接 Netflix报告链接: https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-002.md Go版本发布链接: https://golang.org/doc/devel/release.html#go1.12 Kubernetes社区PR链接: https://github.com/kubernetes/kubernetes/pull/81520 https://github.com/kubernetes/kubernetes/pull/81522
  • 漏洞详情 近期Kubernetes社区发布了与Go相关的安全漏洞CVE-2019-9512和CVE-2019-9514。具体的安全问题出现在Go语言的net/http库中,它会影响Kubernetes的所有版本和所有组件。这些漏洞可能导致所有处理HTTP或HTTPS Listener的进程受到DoS攻击。 由于此问题影响范围很广,Go官方及时针对此问题发布了Go 1.12.9和Go 1.11.13版本。 Kubernetes也在v1.13.10 - go1.11.13版本中完成了Go版本的更新。 CCE已发布最新Kubernetes 1.13.10版本对漏洞进行修复,对于已经创建的Kubernetes 1.13版本,2019年9月底将提供补丁进行修复。针对低于Kubernetes 1.13集群版本将提供升级能力。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 拒绝服务攻击 CVE-2019-9512 高 2019-08-13 资源管理错误 CVE-2019-9514 高 2019-08-13
  • 漏洞详情 业界披露了Linux Kernel openvswitch模块权限提升漏洞(CVE-2022-2639)的漏洞细节。由于 openvswitch模块中reserve_sfa_size()函数在使用过程中存在缺陷,导致本地经过身份认证的攻击者可以利用漏洞提升至root权限。目前漏洞poc已公开,风险较高。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 权限提升 CVE-2022-2639 高 2022-09-01
  • 判断方法 对于1.23及以下版本的CCE集群、CCE Turbo集群,使用web-terminal、cloudshell或者配置kubectl连接集群,运行以下命令,确认是否运行聚合API Server: kubectl get apiservices.apiregistration.k8s.io -o=jsonpath='{range .items[?(@.spec.service)]}{.metadata.name}{"\n"}{end}'
  • 资源变更与弃用 CCE 1.25变更说明 除EulerOS 2.5操作系统外,1.25集群的CCE节点均默认采用containerd运行时。 社区1.25 ReleaseNotes PodSecurityPolicy被废弃,并提供Pod Security Admission取代,具体的迁移方法可参见从PodSecurityPolicy迁移到内置的PodSecurity准入控制器。 SeccompDefault提升到Beta状态,如果要开启该特性,需要给kubelet增加启动参数为--seccomp-default=true,这样会默认开启seccomp为RuntimeDefault,提升整个系统的安全。1.25集群将不再支持使用注解“seccomp.security.alpha.kubernetes.io/pod”和“container.seccomp.security.alpha.kubernetes.io/annotation”来使用seccomp,请使用pod或container中“securityContext.seccompProfile”字段替代,详情请参见为Pod或容器配置安全上下文。 特性开启后可能应用所需的系统调用会被runtime限制,所以开启后应确保在测试环境调试,不会对应用造成影响。 Network Policy中的EndPort已进入稳定状态,该特性于1.21版本合入。主要是在NetworkPolicy新增EndPort,可以指定一个Port范围,避免声明每一个Port。 从1.25版本集群开始,Kubernetes不再支持使用SHA1WithRSA、ECDSAWithSHA1算法生成的证书认证,推荐使用SHA256算法生成的证书进行认证。 社区1.24 ReleaseNotes Dockershim自1.20版本被标废弃以来,在1.24版本正式从Kubelet代码中移除。如果还想使用Docker作为容器运行时的话,需要切换到cri-dockerd,或者使用其他支持CRI的运行时比如Containerd/CRI-O等。 从Docker Engine 切换到Containerd的流程请参见将节点容器引擎从Docker迁移到Containerd。 您需要注意排查是否有agent或者应用强依赖Docker Engine的,比如在代码中使用docker ps,docker run, docker inspect等,需要注意兼容多种runtime,以及切换到标准cri接口。 Beta APIs默认关闭,在社区移除一些长期beta API的过程中发现,90%的集群管理员并没有关心beta API默认开始,其实beta 特性是不推荐在生产环境中使用,但是因为默认的打开策略,导致这些API在生产环境中都被默认开启,这样会因为beta特性的bug带来一些风险,以及升级的迁移的风险。所以在1.24版本开始,beta API默认关闭,之前已经默认开启的beta API会保持默认开启。 LegacyServiceAccountTokenNoAutoGeneration特性门控进入beta状态,默认为开启状态,开启后将不再为Service Account自动生成Secret Token。如果需要使用永不过期的Token,需要自己新建Secrets并挂载,详情请参见服务帐号令牌Secret。 Service废弃service.alpha.kubernetes.io/tolerate-unready-endpoints, 统一使用Service.spec.publishNotReadyAddresses。 Service.Spec.LoadBalancerIP标记deprecated,可能在未来版本中移除,请使用自定义annotation。
  • 漏洞详情 kubelet的驱逐管理器(eviction manager)中没有包含对Pod中挂载的/etc/hosts文件的临时存储占用量管理,因此在特定的攻击场景下,一个挂载了/etc/hosts的Pod可以通过对该文件的大量数据写入占满节点的存储空间,从而造成节点的拒绝访问(Denial of Service)。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 资源管理错误 CVE-2020-8557 中 2020-07-15
  • 漏洞修复方案 建议您采取以下安全防范措施: 通过设置集群Pod安全策略或admission准入机制强制Pod删除CAP_DAC_OVERRIDE系统权限: securityContext: capabilities: drop: ["DAC_OVERRIDE"] 通过使用集群Pod安全策略或其他admission准入机制限制以root用户启动容器,或设置参数allowPrivilegeEscalation为false: securityContext: allowPrivilegeEscalation: false 通过以下命令对容器内的/etc/hosts文件进行监控,如果该文件的大小异常,请采取相应告警或容器隔离措施。 find /var/lib/kubelet/pods/*/etc-hosts -size +1M
  • 漏洞详情 Docker、containerd或者其他基于runc的容器运行时存在安全漏洞,攻击者可以通过特定的容器镜像或者exec操作可以获取到宿主机的runc执行时的文件句柄并修改掉runc的二进制文件,从而获取到宿主机的root执行权限。 华为云容器引擎已修复runc漏洞CVE-2019-5736。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 华为云修复时间 代码执行 CVE-2019-5736 高 2019-02-11 2019-02-12 漏洞CVE-2019-5736的详细信息,请参见:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736
  • 漏洞修复方案 华为云CCE容器服务: 华为云容器引擎已修复runc漏洞CVE-2019-5736。 自建Kubernetes或使用开源容器引擎: 升级Docker到18.09.2版本,由于开源Docker在17.06之后的版本做了较大变更,涉及架构解耦重构,该办法可能会导致用户容器业务中断,建议做好充分验证,并按节点逐步滚动升级。 仅升级runc,对于17.06等Docker版本,可以不中断已运行业务,当前runc官方尚未发布包含漏洞修复补丁的新版本,如果要单独升级runc,用户可自行编译。 另特别提醒,本次Docker官方补丁使用了高版本Linux内核的系统调用,在低版本内核部分版本上可能会失效,若补丁失效时,建议升级至3.17以上内核。华为云CCE容器服务提供的补丁针对官方补丁进行了优化适配,已验证在多版本内核上均可生效。
  • 漏洞详情 Kubernetes官方发布安全公告,其核心组件kube-proxy存在主机边界绕过漏洞(CVE-2020-8558)。利用漏洞攻击者可能通过同一局域网下的容器,或在集群节点上访问同一个二层域下的相邻节点上绑定监听了本地127.0.0.1端口的TCP/UDP服务,从而获取接口信息。如果绑定在端口上的服务没有设置身份验证,则会导致该服务容易受到攻击。例如,如果集群管理员运行监听了127.0.0.1:1234的TCP服务,由于这个bug,该服务将有可能被与该节点在同一局域网中的其他主机,或与该服务运行在同一节点上的容器所访问。如果端口1234上的服务不需要额外的认证(因为假设只有其他localhost进程可以),那么很容易受到利用此bug进行攻击。 华为云提醒使用kube-proxy的用户及时安排自检并做好安全加固。 详情请参考链接:https://github.com/kubernetes/kubernetes/issues/92315 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 代码注入 CVE-2020-8558 高 2020-07-08
  • 漏洞影响 本次漏洞典型的攻击方式是通过恶意镜像:在恶意镜像中,将攻击函数隐藏在恶意动态库如(libseccomp.so.2)中,并使执行命令指向/proc/self/exe。 当runc动态编译时,会从容器镜像中载入动态链接库,导致加载恶意动态库;当打开/prco/self/exe即runc时,会执行恶意动态链接库中的恶意程序,由于恶意程序继承runc打开的文件句柄,可以通过该文件句柄替换host上的runc。 此后,再次执行runc相关的命令,则会产生逃逸。 该漏洞影响范围如下: 本次漏洞对所有采用runc的容器引擎均生效,runc是Docker容器的核心组件,因此对绝大部分容器均会产生影响。其中主要影响的是多用户共享节点的场景,可导致某用户通过渗透进而控制节点并攻击整集群。 华为云CCE容器服务: CCE容器服务创建的Kubernetes集群属于单租户专属,不存在跨租户共享,影响范围较小,对于多用户场景需要关注。 当前CCE采用华为优化的Docker容器,其中RUNC采用静态编译,目前公开披露的攻击方法无法成功入侵。 华为云CCI容器实例服务: CCI引擎采用华为Kata容器引擎,提供单节点上多容器高安全的hypervisor级别的隔离能力,并没有采用runc容器,因此本次漏洞将不会对CCI产生影响。
  • 漏洞详情 近日,Kubernetes社区发现安全漏洞CVE-2018-1002105。通过伪造请求,Kubernetes用户可以在已建立的API Server连接上提权访问后端服务,华为云容器服务已在第一时间完成全面修复。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 华为云修复时间 权限提升 CVE-2018-1002105 严重 2018-12-05 2018-12-05 漏洞详细介绍:https://github.com/kubernetes/kubernetes/issues/71411。
  • 漏洞影响 集群使用了聚合API,只要kube-apiserver与聚合API server的网络直接连通,攻击者就可以利用这个漏洞向聚合 API服务 器发送任何API请求; 如果集群开启了匿名用户访问的权限,则匿名用户也利用这个漏洞。不幸的是Kubernetes默认允许匿名访问,即kube-apiserver的启动参数”-- anonymous-auth=true”;给予用户Pod的exec/attach/portforward的权限,用户也可以利用这个漏洞升级为集群管理员,可以对任意Pod做破坏操作。 该漏洞的更详细讨论,可见社区Issue:https://github.com/kubernetes/kubernetes/issues/71411 该漏洞的影响范围如下: 集群启用了扩展API server,并且kube-apiserver与扩展API server的网络直接连通。 集群对攻击者可见,即攻击者可以访问到kube-apiserver的接口,如果您的集群是部署在安全的私网内,那么不会有影响。 集群开放了pod exec/attach/portforward接口,则攻击者可以利用该漏洞获得所有的kubelet API访问权限。 具体影响的集群版本如下: Kubernetes v1.0.x-1.9.x Kubernetes v1.10.0-1.10.10 (fixed in v1.10.11) Kubernetes v1.11.0-1.11.4 (fixed in v1.11.5) Kubernetes v1.12.0-1.12.2 (fixed in v1.12.3)
  • 漏洞修复方案 综合以上分析,使用华为云CCE服务时不必过于担心,因为: CCE服务创建的集群默认关闭匿名用户访问权限。 CCE服务创建的集群没有使用聚合API。 华为云容器引擎已完成1.11以上版本Kubernetes集群的在线补丁修复,针对低于v1.10的集群(社区已不对其进行修复),已提供补丁版本进行修复,请关注升级公告,及时修复漏洞。 如果您是自己搭建Kubernetes集群,为提高集群的安全系数,建议如下,一定要关闭匿名用户访问权限。 尽快升级到社区漏洞修复版本。合理配置RBAC,只给可信用户Pod的exec/attach/portforward权限。 如果您当前使用的Kubernetes版本低于v1.10,不在官方补丁支持范围内,建议自行回合补丁代码 :https://github.com/kubernetes/kubernetes/pull/71412。
  • 漏洞修复方案 建议您检查所有使用externalIP和loadBalancerIP的Service,确认是否有可疑的Service。 该问题由Kubernetes软件的设计缺陷导致,当前用户可以采取如下措施进行防范: 限制externalIP的使用 方法一:通过Admission Webhook容器(k8s.gcr.io/multitenancy/externalip-webhook:v1.0.0)限制externalIP的使用。源代码和部署说明发布在:https://github.com/kubernetes-sigs/externalip-webhook。 方法二:使用开源软件OPA Gatekeeper限制externalIP的使用。示例说明ConstraintTemplate和Constraint发布在:https://github.com/open-policy-agent/gatekeeper-library/tree/master/library/general/externalip。 限制LoadBalancerIP的使用 由于社区不建议集群管理员向集群内的用户授予service/status对象的patch权限,因此社区没有为LoadBalancerIP提供规避措施。如果您需要对LoadBalancerIP进行限制,则可以参考externalIP的规避措施。
  • 判断方法 如果节点是EulerOS和CentOS,可以用如需命令查看安全包版本: rpm -qa |grep docker 使用EulerOS或者CentOS的节点,docker版本低于18.09.0.100.51.h10.51.h3-1.h15.eulerosv2r7的docker包涉及该CVE漏洞。 使用其它非EulerOS和CentOS的镜像(如Ubuntu),可以使用docker version查看docker版本。若版本低于19.03.15、20.10.3,则涉及该漏洞。
  • 漏洞详情 CVE-2020-8554是Kubernetes社区发现的关于集群内网络流量劫持的安全问题。具有创建和更新Service和Pod对象权限的潜在攻击者,能够劫持集群内来自其他Pod或者节点的流量。潜在攻击者通过设置Service对象的spec.externalIPs字段,能够劫持集群内其他Pod或者节点访问该externalIP(如某公网知名IP)的流量,并将其转发到攻击者创建的恶意Pod中,造成中间人攻击。同理,攻击者通过修改Service对象的status.loadBalancer.ingress.ip也能达到此目的。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 流量劫持 CVE-2020-8554 中 2020-12-07
  • 漏洞影响 docker daemon组件在拉取镜像的过程中没有对镜像层digest进行有效性校验,拉取一个被恶意损坏的镜像可能会导致docker daemon崩溃。 该漏洞可能在以下场景触发: 在集群内的节点上手动docker pull一个被恶意损坏的镜像。 部署工作负载时负载模板中定义了一个被恶意损坏的镜像,kubelet自动拉取镜像时触发。 该漏洞的影响范围如下: 若镜像被恶意损坏,拉取镜像时可能会导致docker daemon崩溃。 使用 容器镜像服务 (SWR)时,如果您的镜像是通过在SWR获取的,上传到镜像仓库的镜像会进行digest校验,此场景不受影响。 该漏洞不会影响运行中的容器。
  • 漏洞详情 外部安全研究人员披露sudo中的堆溢出漏洞(CVE-2021-3156),该漏洞在类似Unix的主要操作系统上都可以使用。在其默认配置下会影响从1.8.2到1.8.31p2的所有旧版本以及从1.9.0到1.9.5p1的所有稳定版本。成功利用此漏洞,任何没有特权的用户都可以在易受攻击的主机上获得root特权。 sudo是一个功能强大的实用程序,大多数基于Unix和Linux的操作系统都包含sudo。它允许用户使用其他用户的安全特权运行程序。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 权限提升 CVE-2021-3156 高 2021-01-26
  • 漏洞详情 Docker是一款开源的应用容器引擎,支持在Linux系统上创建一个容器(轻量级虚拟机)并部署和运行应用程序,以及通过配置文件实现应用程序的自动化安装、部署和升级。 Docker 19.03.15和20.10.3之前的版本存在资源管理错误漏洞,攻击者可以利用该漏洞导致dockerd守护进程崩溃。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 资源管理错误 CVE-2021-21285 中 2021-02-02
  • 漏洞详情 Kubernetes开源社区中披露了2个nginx-ingress漏洞: 1. 漏洞CVE-2021-25745:用户有权限可以在创建/更新ingress时,利用‘spec.rules[].http.paths[].path’字段,获取到ingress-controller使用的凭证,这个凭证可以获取集群中所有命名空间的密钥。 2. 漏洞CVE-2021-25746:用户有权限可以在创建/更新ingress时,利用‘.metadata.annotations’字段,获取到ingress-controller使用的凭证,这个凭证可以获取集群中所有命名空间的密钥。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 权限提升 CVE-2021-25745 中 2022-4-16 权限提升 CVE-2021-25746 中 2022-4-16
  • 漏洞详情 Kubernetes开源社区中披露了1个ingress-nginx漏洞,用户通过Ingress 对象的“spec.rules[].http.paths[].path”字段可以获取ingress-controller使用的credentials。这个credentials可以获取集群中所有namespace的secrets。该漏洞被收录为CVE-2021-25748。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 权限提升 CVE-2021-25748 中 2022-6-10
  • 相关链接 CVE-2021-25745社区漏洞issue:https://github.com/kubernetes/ingress-nginx/issues/8502 CVE-2021-25746社区漏洞issue:https://github.com/kubernetes/ingress-nginx/issues/8503 社区已经发布版本修复: https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.2.0
  • 漏洞修复方案 1. 漏洞CVE-2021-25745消减措施:通过实施准入策略,将'networking.k8s.io/Ingress'中的'spec.rules[].http.paths[].path'限制在已知安全字符中(参考社区最新规则,或者采用annotation-value-word-blocklist中的建议值)。 2. 漏洞CVE-2021-25746消减措施:通过实施准入策略,将'metadata.annotations'的值限制在已知的安全字符中(参考社区最新规则,或者采用annotation-value-word-blocklist中的建议值)。
  • 漏洞处理方案 您可以禁用 kubelet 上的VolumeSubpath feature gate,并删除任何使用subPath功能的现有 Pod。 以root用户登录CCE Node节点。 修改kubelet配置参数,关闭VolumeSubpath特性。 vi /opt/cloud/cce/kubernetes/kubelet/kubelet_config.yaml 添加VolumeSubpath: false字段 重启kubelet。 systemctl restart kubelet 确认kubelet新进程已启动,且已关闭VolumeSubpath。 vi /var/paas/sys/log/kubernetes/kubelet.log 搜索VolumeSubpath=false,如果能搜到说明关闭成功。 删除任何使用subPath功能的Pod。
  • VolumeSubpath特性开启或回退 修改kubelet配置文件,删除VolumeSubpath相关字段。 vi /opt/cloud/cce/kubernetes/kubelet/kubelet_config.yaml 重启kubelet。 systemctl restart kubelet 确认kubelet新进程已启动,且重启后的kubelet.log日志中无VolumeSubpath=false相关字段。
  • 漏洞详情 社区在 Kubernetes 中发现了一个安全问题,用户可以创建一个带有subPath volume挂载的容器,访问卷外的文件和目录,包括主机文件系统上的文件和目录。 容器使用subPath去挂载一些文件或者目录时,攻击者可能利用Symlink Exchange 访问除挂载目录之外的目录或者主机上的文件,造成越权。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 资源管理错误 CVE-2021-25741 中 2021-09-15
  • 漏洞影响 该漏洞涉及VolumeSubpath特性开关开启场景(默认开启),可能造成以下影响: 若恶意用户可以创建一个带有子路径卷挂载的容器,则可以访问卷外的文件和目录,包括主机文件系统上的文件和目录。 集群管理员已限制创建 hostPath 挂载的能力的集群受到的影响最严重。利用该漏洞可以在不使用 hostPath 功能的情况下进行类似 hostPath 的访问,从而绕过限制。 在默认的 Kubernetes 环境中,漏洞利用可用于掩盖对已授予特权的滥用。
  • 漏洞详情 国外安全研究人员William Liu和Jamie Hill-Daniel发现Linux内核中包含一个整数溢出漏洞,可导致写操作越界。本地攻击者可以使用这一点导致拒绝服务(系统崩溃)或执行任意代码,在容器场景下拥有CAP_SYS_ADMIN权限的用户可导致容器逃逸到宿主机。目前已存在poc,但尚未发现已公开的利用代码。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 资源管理错误 CVE-2022-0185 高 2022-01-27
共100000条