上周早期,Kubernetes官方报告了一个评分9.8的漏洞:CVE-2018-1002105,该漏洞将导致用户可以通过伪造请求获得后端服务的提权访问,产生严重的安全隐患。该漏洞由Kubernetes的开发者 Liggitt发现,在报告了对应漏洞后,Kubernetes官方在随后推出的新版本中提供了修复该漏洞的补丁。

 

百度云CCE服务在该漏洞被发现后的第一时间进行了快速处理,全量更新了CCE的安全补丁,并对所有线上集群进行了安全升级,在用户无感知的情况下已经完全修复了该漏洞。

 

漏洞原因

 

该漏洞主要出现在Kubernetes中的kube-apiserver服务,用户首先使用经过授权的合法请求,来使后续同样使用该TCP连接的所有未经授权的请求得以通过,从而获得提权。

 

注:Apiserver为Kubernetes提供认证以及授权工作。Apiserver通常会使用https来进行tls验证,但同时也使用anonymous-auth=true的默认配置来支持匿名访问。同时Apiserver上的授权采用Kubernetes rbac方案,用于支持对于资源的最小授权集合。

漏洞出现的原因在于文件upgradeaware.go中的UpgradeAwareHandler,这一个handler的主要功能是代理用户的upgrade请求,由于Apiserver需要支持websocket,所以它使用这个handler来管理tcp连接。而问题在于,这个handler本身只是一个proxy,它的作用是将合理的请求路由到后端对应的server中。在handler代码中,当含有http header为upgrade的合理认证的请求被发出时,它会被handler传送到aggregate server(例如metrics server),即使请求的响应中不包含return code 101(路由协议),这个由客户端到aggregate server的连接依然会被建立,相当于该连接被“升级”为websocket,从而导致后续的连接都不再需要经过鉴权,而是通过Websocket自己的认证,将代理的请求直接发送到后端(Websocket的特性),导致了前文描述的提权问题。

关于漏洞的更多细节,可以通过Kubernetes的官方Github进行深入了解。

 

  • 对应的Github issue为:

https://github.com/kubernetes/kubernetes/issues/71411。

  • 本次修复的pull request为:

https://github.com/kubernetes/kubernetes/pull/71412。

 

攻击方式

 

攻击者可以通过发送带有http header为upgrade的合理请求到Apiserver来建立websocket连接,并且后续可以发送任意http请求来绕过Kubernetes的基于RBAC的鉴权策略,从而越权访问后端服务器。

 

在Kubernetes的Apiserver选项中,默认打开了anonymous-auth=true,因此组别为system:unauthenticated的用户默认绑定了system:discovery的role,即使在https的协议下,用户依然可以不使用证书来访问该role对应的API,例如健康检查等,如下图所示:

 

Kubernetes首个重要安全漏洞研究&百度云全量修复报告
Kubernetes首个重要安全漏洞研究&百度云全量修复报告

所以如果Apiserver为默认配置,则攻击者可以直接通过外部system:unauthenticated的system:discovery role、或是pod内部的default serviceaccount中的system:discovery role来对aggregate server进行提权操作。而在Kubernetes 1.8之后,metrics server作为aggregate server的一种是默认安装的,所以攻击者可以通过该漏洞暴露集群的整体状态。

 

还有一种情况是用户本身已经有pod的create/get/exec/attach/portforward的权限,也可以通过该漏洞对集群本身进行提权操作,例如获取集群etcd的secret等操作。

 

推荐措施

 

对于使用百度云CCE的用户而言,CCE已经对所有集群的Kubernetes安全补丁进行了全量更新,该漏洞已经被完全修复,因此用户无需担心,可以继续正常使用。

 

如果用户使用百度云BCC完全自行搭建Kubernetes,建议第一时间登录Kubernetes官网下载最新版本,提前做好数据备份并检查相关配置,在合适的时机对集群版本进行升级。如果不具备升级Kubernetes版本的条件,请务必参考本文中对漏洞原因和攻击方式的分析,详细检查各项配置,防止因该漏洞产生不必要的损失。

 

对于有容器或者Kubernetes使用需求的用户,百度云容器引擎CCE是安全可靠的容器管理服务,提供易用且功能完整的容器管理和调度服务,用于搭建用户业务应用运行所需的容器环境。

 

CCE完全基于原生的Kubernetes,并针对公有云的使用模式进行了多方面的优化:包括企业级的安全性和稳定性、对云上异构计算资源的支持、对存储网络等服务的统一管理等。在充分发挥开源Kubernetes优势的前提下,大大降低了用户使用时的管理成本和安全风险。

CCE目前已经在百度云北京、苏州、广州、香港等多个区域正式上线,欢迎有容器使用需求的用户点击https://cloud.baidu.com/product/cce.html,登陆百度云官网咨询和了解。 ')}