华为云用户手册

  • 漏洞详情 近日,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。
  • 漏洞详情 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容器服务提供的补丁针对官方补丁进行了优化适配,已验证在多版本内核上均可生效。
  • 漏洞影响 本次漏洞典型的攻击方式是通过恶意镜像:在恶意镜像中,将攻击函数隐藏在恶意动态库如(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产生影响。
  • 附:TCP SACK介绍 TCP是面向连接的协议。当双方希望通过TCP连接进行通信时,他们通过TCP握手交换某些信息建立连接,例如发起一个TCP请求,通过SYN发送初始序列ID,确认ID,连接使用的最大数据包段大小(MSS),认证信息和处理选择性确认(SACK)等。整体TCP连接通过我们熟知的三次握手最终建立。 TCP通过一个数据段单元发送和接收用户数据包。 TCP数据段由TCP头,选项和用户数据组成。每个TCP段都有序列号(SEQ)和确认号(ACK)。 接收方通过SEQ号和ACK号来跟踪成功接收了哪些段。ACK号下一个预期接受的段。 示例: 上图中用户A通过13个100字节的段发送1k字节的数据,每个段具有20字节的TCP头,总计是13个段。在接收端,用户B接收了段1,2,4,6,8-13,而段3,5和7丢失,B没有接收到。 通过使用ACK号,用户B告诉A,他需要段3,用户A收到B接收到2,而没有收到3,A将重新发送全部段,尽管B已经收到了4,6和8-13段。所以导致大量重复传输,性能低下。
  • 漏洞详情 2019年6月18日,Redhat发布安全公告,Linux内核处理器TCP SACK模块存在3个安全漏洞(CVE-2019-11477、CVE-2019-11478、CVE-2019-11479),这些漏洞与最大分段大小(MSS)和TCP选择性确认(SACK)功能相关,攻击者可远程发送特殊构造的攻击包造成拒绝服务攻击,导致服务器不可用或崩溃。 华为云CCE团队已经紧急修复Linux内核SACK漏洞,并已发布解决方案。 参考链接: https://www.suse.com/support/kb/doc/?id=7023928 https://access.redhat.com/security/vulnerabilities/tcpsack https://www.debian.org/lts/security/2019/dla-1823 https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/SACKPanic? https://lists.centos.org/pipermail/centos-announce/2019-June/023332.html https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001.md 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 华为云修复时间 输入验证错误 CVE-2019-11477 高 2019-06-17 2019-07-06 资源管理错误 CVE-2019-11478 高 2019-06-17 2019-07-06 资源管理错误 CVE-2019-11479 高 2019-06-17 2019-07-06
  • 漏洞详情 近期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
  • 参考链接 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
  • 附:为何影响? 这些攻击大多在HTTP/2传输层进行。如下图所示,该层位于TLS传输之上,但在请求概念之下。事实上,许多攻击都涉及0或1个请求。 从早期的超文本传输协议开始,中间件服务就以请求为导向:日志以请求为分割(而不是连接);速率限制发生在请求级别;并且流量控制也由请求触发。 相比之下,没有多少工具可以根据客户端在HTTP/2连接层的行为来执行记录、速率限制和修正。因此,中间件服务可能会发现更难发现和阻止恶意的HTTP/2连接,并且可能需要添加额外的工具来处理这些情况。 这些攻击媒介允许远程攻击者消耗过多的系统资源。有些攻击足够高效,单个终端系统可能会对多台服务器造成严重破坏(服务器停机/核心进程崩溃/卡死)。其他攻击效率较低的情况则产生了一些更棘手的问题,只会使服务器的运行变得缓慢,可能会是间歇性的,这样的攻击会更难以检测和阻止。
  • 漏洞详情 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
  • 漏洞修复方案 建议您采取以下安全防范措施: 通过设置集群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
  • 漏洞详情 kubelet的驱逐管理器(eviction manager)中没有包含对Pod中挂载的/etc/hosts文件的临时存储占用量管理,因此在特定的攻击场景下,一个挂载了/etc/hosts的Pod可以通过对该文件的大量数据写入占满节点的存储空间,从而造成节点的拒绝访问(Denial of Service)。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 资源管理错误 CVE-2020-8557 中 2020-07-15
  • 漏洞影响 由于kube-apiserver中在升级请求的代理后端中允许将请求传播回源客户端,攻击者可以通过截取某些发送至节点kubelet的升级请求,通过请求中原有的访问凭据转发请求至其他目标节点,从而造成被攻击节点的权限提升漏洞。该漏洞为中危漏洞,CVSS评分为6.4。 如果有多个集群共享使用了相同的CA和认证凭证,攻击者可以利用此漏洞攻击其他集群,这种情况下该漏洞为高危漏洞。 对于此次漏洞的跨集群攻击场景,CCE集群使用了独立签发的CA,同时不同集群间认证凭据完全隔离,跨集群场景不受影响。 从v1.6.0之后到下列修复版本的所有kube-apiserver组件均包含漏洞代码: kube-apiserver v1.18.6 kube-apiserver v1.17.9 kube-apiserver v1.16.13 下列应用场景在此次漏洞的影响范围内: 如果集群运行业务中存在多租户场景,且以节点作为不同租户间隔离的安全边界。 不同集群间共享使用了相同的集群CA和认证凭据。
  • 判断方法 若CCE集群中安装了NGINX Ingress控制器插件,且版本号在3.0.7以下,则受该漏洞影响,否则不受影响。判断方法如下: 使用kubectl查找与cceaddon-nginx-ingress相关的Pod: kubectl get po -A | grep cceaddon-nginx-ingress 若返回如上图,则代表集群中安装了NGINX Ingress控制器插件。 检查NGINX Ingress控制器插件使用的nginx-ingress镜像版本: kubectl get deploy cceaddon-nginx-ingress-controller -nkube-system -oyaml|grep -w image 如上图,若当前安装的NGINX Ingress控制器插件对应的社区nginx-ingress版本低于v1.11.2,则涉及该漏洞。
  • 漏洞影响 Fluent Bit 版本2.0.7 - 3.0.3中存在堆缓冲区溢出漏洞,该漏洞存在于Fluent Bit的嵌入式http服务器对跟踪请求的解析中,由于在解析/api/v1/traces 端点的传入请求时,在解析之前未正确验证input_name的数据类型,可通过在请求的“inputs”数组中传递非字符串值(如整数值),可能导致内存崩溃,成功利用该漏洞可能导致拒绝服务、信息泄露或远程代码执行。 CCE集群中安装了云原生日志采集插件,且版本为1.3.4-1.5.1时则涉及该漏洞。
  • 漏洞消减方案 CCE已在云原生日志采集插件1.5.2版本中修复该漏洞,在修复前建议通过关闭指标上报接口消减该漏洞影响: 节点上执行以下命令: kubectl edit cm -n monitoring log-agent-fluent-bit-config-service 将配置项中HTTP_Server On改为HTTP_Server Off,并保存。 重启monitoring命名空间下的log-agent-log-operator组件。
  • 判断方法 您可以在节点上执行命令查看容器引擎使用的cgroup。 容器引擎为containerd的节点,执行以下命令: crictl info |grep -i systemdCgroup 显示如下: "systemdCgroup": false 容器引擎为docker的节点,执行以下命令: docker info |grep "Cgroup" 显示如下: Cgroup Driver: cgroupfs 表明容器引擎使用的cgroup系统为cgroupfs,并未使用systemd cgroup,不受此漏洞影响。
  • 漏洞详情 runc是一个基于OCI标准实现的一个轻量级容器运行工具,是Docker、Containerd、Kubernetes等容器软件的核心基础组件。近日,runc社区发布最新版本,修复了一处高危级别的容器逃逸漏洞(CVE-2024-21626)。由于内部文件描述符泄漏,攻击者可通过控制容器进程的工作目录,或命令路径,将其设置为文件描述符的父级目录下的路径,读写主机任意文件,实现容器逃逸。 详细信息请参见:runc容器逃逸漏洞预警(CVE-2024-21626)
  • 漏洞影响 Linux系统内核在3.15-6.8中的netfilter: nf_tables组件存在释放后重利用漏洞,nft_verdict_init() 函数允许在钩子判定中使用正值作为丢弃错误,当 NF_DROP 发出类似于 NF_ACCEPT 的丢弃错误时,nf_hook_slow() 函数会导致双重释放漏洞,本地攻击者利用此漏洞可将普通用户权限提升至 root 权限。 该漏洞是一个本地提权漏洞,需要攻击者先渗透到集群的node节点,利用难度较高。
  • 判断方法 对于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}'
  • 漏洞详情 业界披露了Linux Kernel openvswitch模块权限提升漏洞(CVE-2022-2639)的漏洞细节。由于 openvswitch模块中reserve_sfa_size()函数在使用过程中存在缺陷,导致本地经过身份认证的攻击者可以利用漏洞提升至root权限。目前漏洞poc已公开,风险较高。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 权限提升 CVE-2022-2639 高 2022-09-01
  • 漏洞详情 containerd开源社区中披露了一个安全漏洞,在containerd创建容器的场景,非root容器进程的初始inheritalbe capability不为空,可能会造成在execve执行可执行文件时提升到允许的cap集合。该问题已被收录为CVE-2022-24769。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 权限提升 CVE-2022-24769 低 2022-3-24
  • 漏洞影响 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以下的集群。
  • 漏洞详情 crowdstrike安全团队披露CRI-O 1.19版本中存在一个安全漏洞,攻击者可以利用该漏洞绕过保护措施并在主机上设置任意内核参数。这将导致任何有权在使用CRI-O的Kubernetes集群上部署Pod的用户都可以滥用kernel.core_pattern内核参数,在集群中的任何节点上以root身份实现容器逃逸和执行任意代码。 该问题已被收录为CVE-2022-0811。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 容器逃逸 CVE-2022-0811 高 2021-03-16
  • 相关链接 Red Hat社区漏洞公告:https://access.redhat.com/security/cve/cve-2022-0811 cr8escape: New Vulnerability in CRI-O Container Engine Discovered by CrowdStrike:https://www.crowdstrike.com/blog/cr8escape-new-vulnerability-discovered-in-cri-o-container-engine-cve-2022-0811/
  • 漏洞影响 该漏洞为Linux内核权限校验漏洞,根因为没有针对性的检查设置release_agent文件的进程是否具有正确的权限。在受影响的OS节点上,工作负载使用了root用户运行进程(或者具有CAP_SYS_ADMIN权限),并且未配置seccomp时将受到漏洞影响。 CCE集群受该漏洞影响的范围如下: x86场景EulerOS 2.5和CentOS镜像不受该漏洞影响。 内核版本小于4.19.36-vhulk1907.1.0.h962.eulerosv2r8.aarch64的EulerOS arm版本。 内核版本小于4.18.0-147.5.1.6.h541.eulerosv2r9.x86_64的EulerOS x86版本。 内核版本为4.15.0-136-generic以及以下内核版本的Ubuntu节点。
  • 相关链接 内核修复commit:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=24f6008564183aa120d07c03d9289519c2fe02af Red Hat社区漏洞公告:https://access.redhat.com/security/cve/cve-2022-0492
  • 漏洞详情 国外安全研究人员William Liu和Jamie Hill-Daniel发现Linux内核中包含一个整数溢出漏洞,可导致写操作越界。本地攻击者可以使用这一点导致拒绝服务(系统崩溃)或执行任意代码,在容器场景下拥有CAP_SYS_ADMIN权限的用户可导致容器逃逸到宿主机。目前已存在poc,但尚未发现已公开的利用代码。 表1 漏洞信息 漏洞类型 CVE-ID 漏洞级别 披露/发现时间 资源管理错误 CVE-2022-0185 高 2022-01-27
共100000条