K8S漏洞报告|近期bug fix解读&1.11主要bug fix汇总
angoo
6年前
<p>在本周的跟踪分析中,以1.11版本为例,共有24条bug fix,其中8条与Kubernetes核心内容相关。</p> <p>另外,近期公布了一条高危漏洞,本文会对此进行具体分析。</p> <p><span style="color:rgb(61, 170, 214)"><strong>由于社区目前已经停止维护1.9版本,建议大家尽快升级1.11。本文也将开始持续更新1.11版本bug fix解读,并停止更新1.9。</strong></span></p> <h2><span style="color:rgb(255, 104, 39)"><strong><span style="color:rgb(255, 104, 39)">1. 严重漏洞CVE-2018-1002105深入解读</span></strong></span></h2> <h3><span style="color:rgb(61, 170, 214)"><strong>背景</strong></span></h3> <p>近日kubernetes被爆出高位特权升级漏洞(CVE-2018-1002105),通过特制的网络请求,任何用户都可以通过Kubernetes应用程序编程接口(API)服务器与后端服务器建立连接。一旦建立,攻击者就可以通过网络连接直接向该后端发送任意请求。</p> <h3><span style="color:rgb(61, 170, 214)"><strong>攻击步骤</strong></span></h3> <p>具体攻击步骤如下:</p> <ol> <li> <p>发送第一个请求,通过kube-apiserver创建一个错误的websocket请求(例如请求体中缺少必要的字段),去调用kubelet的api(例如exec pod),使kubelet的api返回非101(StatusSwitchingProtocals)错误码(例如:400)。</p> </li> <li> <p>发送第二个请求,通过kube-apiserver访问kubelet另一个越权的api(例如list pods),便可以绕过kube-apiserver的认证鉴权,获取同一个kubelet所有租户的pod信息。</p> </li> </ol> <h3><span style="color:rgb(61, 170, 214)"><strong>攻击原理</strong></span></h3> <p>攻击原理是:</p> <p> </p> <ol> <li> <p> kube-apiserver发送的websocket的请求转到kubelet,kubelet把错误信息返回给kube-apiserver后认为该请求已经结束了,因为kube-apiserver并没有判断kubelet的返回码,只做透传,kube-apiserver仍然保存着这个连接。</p> </li> <li> <p>第二个请求,在kube-apiserver中<strong>直接复用第一个请求的连接</strong>,然后构造一个越权的api直接访问kubelet,此时kube-apiserver之前请求的长连接还在,直接透传,而kubelet认为是一个新的请求,直接响应返回结果给客户端,导致kube-apiserver中的认证鉴权失效。</p> </li> </ol> <h3><span style="color:rgb(61, 170, 214)"><strong>修复版本</strong></span></h3> <p>好在目前并未发现针对该漏洞的实际应用,社区也已经在所有维护的版本紧急修复了这个漏洞,包括:</p> <table style="width:-111"> <tbody> <tr> <td>v1.10</td> <td>v1.11</td> <td>v1.12</td> <td>v1.13</td> </tr> <tr> <td>v1.10.11</td> <td>v1.11.5</td> <td>v1.12.3</td> <td>v1.13.0</td> </tr> </tbody> </table> <p>具体修复方法可以参考</p> <p>https://github.com/kubernetes/kubernetes/pull/71412</p> <p>简单来说就是,在kube-apiserver端增加第一个请求的返回码判断逻辑,如果返回码不是101,则直接请求失败,关闭连接。</p> <h3><span style="color:rgb(61, 170, 214)"><strong>验证方法</strong></span></h3> <p>虽然目前还没有发现针对该漏洞的应用,但是现在这个漏洞已经发布出来,很多人都掌握了这个漏洞的攻击方法,所以赶快验证下自己的环境有没有问题,有问题就赶快修复吧。</p> <p>https://github.com/gravitational/cve-2018-1002105/blob/master/main.go</p> <p>大家下载下来,编包,然后配置好环境上的kubeconfig文件,执行二进制,如果当前环境还有这个漏洞,则会返回:</p> <p>Testing for unauthenticated access...</p> <p>Testing for privilege escalation...</p> <p><strong>> API is vulnerable to CVE-2018-1002105</strong></p> <p>如果没有漏洞,执行结果中不会出现最后一行。</p> <h2><span style="color:rgb(255, 104, 39)"><strong>2.近期bug fix数据分析</strong></span></h2> <p>本周更新近期(11/9-12/11)1.11版本的bug-fix数据及分析。</p> <p>在关注的时间段内,1.11版本有24条bug-fix,其分布情况如图所示:</p> <p><img src="https://simg.open-open.com/show/8c46c1d2ddb0f3b8e00749379b31af25.png"></p> <p>从上图可以看出,这段时间更新的bug fix干货满满,apiserver相关的就有4条,另外还有kubelet/scheduler/controller等核心组件相关内容。</p> <p>从严重程度来看,除了前文提到的高危漏洞外,还有8条比较严重的bug fix,需要大家重点关注。</p> <p><img alt="" src="https://simg.open-open.com/show/2f3c956a9fac04d18933e6fab1053325.png"></p> <p>Bug fix严重程度统计,2及以下的bug fix有15个,严重程度为3的bug fix有8个,需要重点关注。</p> <h2><span style="color:rgb(255, 104, 39)"><strong>3.<span style="color:rgb(255, 104, 39)">1.11重要bug fix解读</span></strong></span></h2> <p>由于社区目前已停止维护1.9和1.10版本,建议大家尽快升级到1.11版本,本周也将开始更新1.11版本bug fix解读。</p> <p> </p> <h3><span style="color:rgb(61, 170, 214)"><strong>1.11.1版本重要bug fix解读信息:</strong></span></h3> <p><img alt="" src="https://simg.open-open.com/show/50d0eea626948bf498b43e37f9f599fa.png"></p> <p> </p> <p><span style="color:rgb(255, 104, 39)"><strong>4.重要bug fix解读</strong></span></p> <p><span style="color:rgb(61, 170, 214)"><strong>1.9.9-1.9.10重要bug fix解读:</strong></span></p> <p><span style="color:rgb(61, 170, 214)"><strong><img alt="" src="https://simg.open-open.com/show/49344219e265cdc6121f519653e1b2aa.png"></strong></span></p> <p style="text-align:center"> </p> <p style="text-align:center"> </p> <p>来自:https://mp.weixin.qq.com/s/Yru-nOdVs5oOj9DICoApww</p> <p> </p>