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

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」

Docker v19.03.11 发布

距离 v19.03.10 发布仅一周时间,Docker 又发布了新版本 v19.03.11 。此版本是一个安全修复版本,通过禁用了 IPv6 路由地址广播(RA)从而防止地址欺骗,对应的漏洞为 CVE-2020-13401

在 Docker 的默认配置中,容器网络接口是指向主机(veth 接口)的虚拟以太网链接,在此配置下,如果一个攻击者可以在容器中以 root 身份运行进程的话,那么他是可以使用 CAP_NET_RAW 能力,向主机任意发送和接收数据包的。

例如: 在容器内使用 root 用户,可以正常执行 ping 命令

(MoeLove) ➜  ~ docker run --rm -it -u root redis:alpine sh
/data # whoami
root
/data # ping -c 1 moelove.info
PING moelove.info (185.199.108.153): 56 data bytes
64 bytes from 185.199.108.153: seq=0 ttl=49 time=54.389 ms

--- moelove.info ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 54.389/54.389/54.389 ms

在容器内使用非 root 用户,执行 ping 命令会提示无权限

(MoeLove) ➜  ~ docker run --rm -it -u redis redis:alpine sh
/data # whoami
redis
/data $ ping -c 1 moelove.info
PING moelove.info (185.199.109.153): 56 data bytes
ping: permission denied (are you root?)

如果没有在主机上完全禁用 IPv6 (通过内核参数 ipv6.disable=1), 那么主机上的网络接口可以自己进行配置。如果配置项为 /proc/sys/net/ipv6/conf/*/forwarding == 0 那表示该接口禁用了 IPv6 转发。全局的静态配置可以在以下位置看到:

(MoeLove) ➜  ~ cat /proc/sys/net/ipv6/conf/all/forwarding
1

另外,还有一个默认配置是关于是否接收 RA 消息的,如果配置项为 /proc/sys/net/ipv6/conf/*/accept_ra == 1,则表示该接口默认接收 RA 消息。全局的静态配置可以在以下位置看到:

(MoeLove) ➜  ~ cat /proc/sys/net/ipv6/conf/all/accept_ra 
1

上述的两个系统默认配置的组合,表示系统接受路由广播(RA)消息,并且使用它配置 IPv6 网络栈(SLAAC)。如果熟悉 IETF RFC 4861 的小伙伴应该知道,ICMPv6 RA 虽然本意是好的,但它确实存在安全风险。

在尚未使用 IPv6 的网络中,双栈主机处于休眠状态,并等待最终的 RA 消息来唤醒其 IPv6 连接。攻击者可以制作恶意的 RA 消息,获取网络中的双协议节点以配置其 IPv6 地址,并利用攻击者的系统作为其默认的网关。这样便可很简单的实施中间人攻击了。在 RFC 6104 中其实早就记录过这个问题,也有很多相关的解决方案,此处就不展开了,涉及的东西太多了。

对应到此次漏洞中,如果攻击者通过容器发送恶意 RA 消息(rogue RA),则可以重新配置主机,将主机的部分或者全部 IPv6 通信都重定向到攻击者控制的容器。

即使之前没有 IPv6 流量,如果 DNS 服务器返回 A(IPv4)和 AAAA(IPv6)记录的话,很多 HTTP 库将会首先尝试进行 IPv6 连接,然后再回退到 IPv4 。这就为攻击者提供了制造响应的机会。

如果主机恰好有类似去年 apt 的 CVE-2019-3462 这种漏洞的话,则攻击者便可能获取主机权限。

总体而言,Docker 容器默认没有配置 CAP_NET_ADMIN 能力,所以攻击者无法直接将其配置为中间人攻击的 IP,无法使用 iptables 进行 NAT 或者 REDIRECT 流量,也不能使用 IP_TRANSPARENT。但是攻击者仍然可以使用 CAP_NET_RAW 能力,并在用户空间实现 TCP/IP 堆栈。

聊完 Docker 相关的这个漏洞,这里就顺便展开聊聊相关的一些其他问题吧。

与此漏洞类似的,受影响的还有 Kubernetes , 但并不是 Kubernetes 自身的漏洞,而是官方安装源仓库中,kubelet 依赖的 kubernetes-cni CNI 包,也存在漏洞 CVE-2020-10749

受影响版本为:

  • kubelet v1.18.0-v1.18.3
  • kubelet v1.17.0-v1.17.6
  • kubelet v1.16.11 之前版本

第三方组件相关的漏洞信息:

以下第三方组件目前未受此次漏洞影响:

  • Cilium
  • Juniper Contrail Networking
  • OpenShift SDN
  • OVN-Kubernetes
  • Tungsten Fabric

结合前面我对此漏洞的说明,想必你也看到了,解决此漏洞最简单的方法是:

  • 更新相关组件到最新(包含修复内容)的版本(截至目前,相关受影响组件中,除 Flannel 外,均已发布新版本来解决此漏洞);
  • 可以在系统中禁止接收 RA 消息(如果你不需要 RA 消息的话);
  • 也可以禁用容器的 CAP_NET_RAW 能力,例如:
(MoeLove) ➜  ~ docker run --cap-drop CAP_NET_RAW --rm -it -u root redis:alpine sh
/data # ping -c 1 moelove.info
PING moelove.info (185.199.108.153): 56 data bytes
ping: permission denied (are you root?)

Docker Compose v1.26.0 发布

Docker Compose 是一个很方便灵活的工具,大家应该不会陌生。前段时间 Docker 将 Compose 规范开源后,社区在逐步成长中。

本次发布的 v1.26.0 中,包含了很多值得注意的内容:

  • 添加了对 doker context 的支持,context 非常好用!Docker Inc. 在今年的 Docker Con 之前还和 Azure 达成了合作,加速从本地到云的开发/部署等,具体操作上也都是通过 context 实现的;
  • 支持通过 COMPOSE_COMPATIBILITY 环境变量配置其能力;

对此版本感兴趣的朋友请参考其 ReleaseNote

Kube-OVN v1.2 发布

Kube-OVN 是首次出现在「K8S 生态周报」中的项目,稍微做下介绍。它是一款基于 OVN 的 Kubernetes 网络组件,通过将OpenStack领域成熟的网络功能平移到Kubernetes,来应对更加复杂的基础环境和应用合规性要求。

Kube-OVN主要具备五大主要功能:Namespace 和子网的绑定,以及子网间访问控制,静态IP分配,动态QoS,分布式和集中式网关,内嵌 LoadBalancer。

本次发布的 v1.2 中包含了以下重要更新:

  • 开始支持 OVS-DPDK 以便于支持高性能 dpdk 应用;
  • 支持使用 BGP 将 Pod IP 路由宣告到外部网络;
  • 在创建后,支持修改子网 CIDR (我个人觉得这个功能特别有用,网络规划也有动态调整的实际需求);
  • 当子网网关修改后,路由可以自动更改;

对此版本感兴趣的朋友请参考其 RelaseNote

上游进展

本周 Kubernetes v1.19.0-beta1 已经发布!

  • #91113#91481kubectl create deployment 时,增加了 --port 的选项;

另一个值得开心的变更来自 etcd :

  • #11946 为 etcd 添加了一个 --unsafe-no-fsync 的选项,可以禁止文件同步。这对于本地开发/CI 测试都是非常好的!

欢迎订阅我的文章公众号【MoeLove】

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349