当前位置: 首页 > Linux

K8S生态周报-影响几乎所有k8s集群的漏洞

时间:2023-04-07 01:57:49 Linux

《K8S生态周刊》主要包含一些我接触过的K8S生态相关的每周推荐信息。欢迎订阅知乎专栏《k8s生态》。Dockerv19.03.11发布在v19.03.10发布仅一周后,Docker发布了新版本v19.03.11。该版本为安全修复版本,通过禁用IPv6路由地址通告(RA)来防止地址欺骗,对应的漏洞为CVE-2020-13401。在Docker的默认配置中,容器网络接口是一个指向主机的虚拟以太网链接(veth接口),在这种配置中,如果攻击者可以在容器中以root身份运行进程,那么他就可以使用CAP_NET_RAW能力,发送和向主机任意接收数据包。例如:在容器中使用root用户正常执行ping命令(MoeLove)?~dockerrun--rm-it-urootredis:alpinesh/data#whoamiroot/data#ping-c1moelove.infoPINGmoelove.info(185.199.108.153):56databytes64bytesfrom185.199.108.153:seq=0ttl=49time=54.389ms---moelove.infopingstatistics---1packetstransmitted,1packetsreceived,0%packetlossround-tripmin/avg/max=54.389/54.389/54.389ms在容器中使用非root用户,执行ping命令会提示没有权限(萌爱)?~dockerrun--rm-it-uredisredis:alpinesh/data#whoamiredis/data$ping-c1moelove.infoPINGmoelove.info(185.199.109.153):56databytesping:permissiondenied(areyouroot?)如果主机上没有完全禁用IPv6(通过内核参数ipv6.disable=1),主机上的网络接口可以自行配置。如果配置项为/proc/sys/net/ipv6/conf/*/forwarding==0,则表示该接口关闭了IPv6转发。全局静态配置可以在以下位置看到:(萌爱)?~cat/proc/sys/net/ipv6/conf/all/forwarding1另外默认配置是否接收RA消息,如果配置item为/proc/sys/net/ipv6/conf/*/accept_ra==1,表示接口默认接受RA消息。全局静态配置可以在以下位置看到:(萌爱)?~cat/proc/sys/net/ipv6/conf/all/accept_ra1以上两个系统默认配置的组合,表示系统接受路由通告(RA)消息并使用它来配置IPv6网络堆栈(SLAAC)。熟悉IETFRFC4861的应该都知道,ICMPv6RA虽然用心良苦,但确实存在安全隐患。在尚未使用IPv6的网络中,双栈主机处于休眠状态并等待最终RA消息唤醒它们的IPv6连接。攻击者可以制作恶意RA消息,获取网络中的双协议节点来配置其IPv6地址,并将攻击者的系统作为其默认网关。这使得实施中间人攻击变得容易。其实这个问题已经记录在RFC6104中,相关的解决方案也很多,这里就不展开了,涉及的东西太多了。与此漏洞对应的是,如果攻击者通过容器发送恶意RA消息(流氓RA),则可以重新配置主机,将主机的部分或全部IPv6通信重定向到攻击者控制的容器。如果DNS服务器返回A(IPv4)和AAAA(IPv6)记录,即使之前没有IPv6流量,许多HTTP库也会尝试先建立IPv6连接然后回退到IPv4。这为攻击者提供了制作响应的机会。如果主机恰好存在类似去年aptCVE-2019-3462的漏洞,攻击者就有可能获得主机权限。一般来说,Docker容器默认是没有配置CAP_NET_ADMIN能力的,所以攻击者不能直接配置为IP进行中间人攻击,不能使用iptables做NAT或者REDIRECT流量,不能使用IP_TRANSPARENT.但是攻击者仍然可以使用CAP_NET_RAW功能并在用户空间中实现TCP/IP堆栈。说完这个与Docker相关的漏洞,我们顺便说说其他一些相关的问题。与此漏洞类似,Kubernetes也受到影响,但不是Kubernetes本身的漏洞,而是kubelet依赖的官方安装源码仓库中的kubernetes-cniCNI包,也存在漏洞CVE-2020-10749。受影响版本为:Kubeletv1.18.0-v1.18.3kubeletv1.17.0-v1.17.6Kubeletv1.16.11第三方组件相关漏洞信息:Calico和CalicoEnterprise(CVE-2020-13597)漏洞信息TTA-2020-001可用在此处查看https://www.projectcalico.org...;CNIPluginsv0.8.6之前版本(CVE-2020-10749),详见https://github.com/containern...;法兰绒完整版;WeaveNetv2.6.3之前的版本;以下第三方组件目前不受此漏洞影响:CiliumJuniperContrailNetworkingOpenShiftSDNOVN-KubernetesTungstenFabric结合我之前对这个漏洞的描述,你一定看到了,解决这个漏洞最简单的方法是:更新相关组件到最新(包括修复)版本(截至目前,除Flannel外,所有受影响组件均已发布新版本解决该漏洞);您可以在系统中禁用接收RA消息(如果您不需要RA消息);也可以禁用容器的CAP_NET_RAW功能,例如:(MoeLove)?~dockerrun--cap-dropCAP_NET_RAW--rm-it-urootredis:alpinesh/data#ping-c1moelove。infoPINGmoelove.info(185.199.108.153):56databytesping:permissiondenied(你是root吗?)DockerComposev1.26.0releaseDockerCompose是一个非常方便灵活的工具,大家应该很熟悉了。Docker在前段时间开源了Compose规范后,社区逐渐壮大。本次发布的v1.26.0包含了很多值得关注的内容:新增了对dokercontext的支持,context非常好用!DockerInc.在今年的DockerCon之前也和Azure达成了合作,加速从本地到云端的开发/部署等等,具体的操作也是通过context来实现的;它支持通过COMPOSE_COMPATIBILITY环境变量配置其功能;对此版本感兴趣的朋友,请参考其ReleaseNoteKube-OVNv1.2ReleaseKube-OVN是第一个出现在《K8S生态周报》的项目。让我稍微介绍一下。是一个基于OVN的Kubernetes网络组件,将OpenStack领域成熟的网络功能移植到Kubernetes上,以应对更复杂的基础环境和应用合规需求。Kube-OVN主要有五个主要功能:命名空间与子网绑定、子网间访问控制、静态IP分配、动态QoS、分布式和集中式网关、嵌入式LoadBalancer。本次v1.2版本包含以下重要更新:开始支持OVS-DPDK,支持高性能dpdk应用;支持使用BGP向外网发布PodIP路由;支持修改子网CIDR(个人觉得这个功能很好用,网络规划也有动态调整的实际需要);修改子网网关时,可自动更改路由;对该版本感兴趣的朋友,请参考其RelaseNoteupstream本周进度Kubernetesv1.19.0-beta1已经发布!#91113和#91481将--port选项添加到kubectlcreatedeployment;另一个令人高兴的变化来自etcd:#11946向etcd添加了一个--unsafe-no-fsync选项以禁用文件同步。这非常适合本地开发/CI测试!欢迎订阅我的文章公众号【MoeLove】