K8S漏洞報告|近期bug fix解讀&1.11主要bug fix匯總
在本周的跟蹤分析中,以1.11版本為例,共有24條bug fix,其中8條與Kubernetes核心內容相關。
另外,近期公布了一條高危漏洞,本文會對此進行具體分析。
由于社區目前已經停止維護1.9版本,建議大家盡快升級1.11。本文也將開始持續更新1.11版本bug fix解讀,并停止更新1.9。
1. 嚴重漏洞CVE-2018-1002105深入解讀
背景
近日kubernetes被爆出高位特權升級漏洞(CVE-2018-1002105),通過特制的網絡請求,任何用戶都可以通過Kubernetes應用程序編程接口(API)服務器與后端服務器建立連接。一旦建立,攻擊者就可以通過網絡連接直接向該后端發送任意請求。
攻擊步驟
具體攻擊步驟如下:
-
發送第一個請求,通過kube-apiserver創建一個錯誤的websocket請求(例如請求體中缺少必要的字段),去調用kubelet的api(例如exec pod),使kubelet的api返回非101(StatusSwitchingProtocals)錯誤碼(例如:400)。
-
發送第二個請求,通過kube-apiserver訪問kubelet另一個越權的api(例如list pods),便可以繞過kube-apiserver的認證鑒權,獲取同一個kubelet所有租戶的pod信息。
攻擊原理
攻擊原理是:
-
kube-apiserver發送的websocket的請求轉到kubelet,kubelet把錯誤信息返回給kube-apiserver后認為該請求已經結束了,因為kube-apiserver并沒有判斷kubelet的返回碼,只做透傳,kube-apiserver仍然保存著這個連接。
-
第二個請求,在kube-apiserver中直接復用第一個請求的連接,然后構造一個越權的api直接訪問kubelet,此時kube-apiserver之前請求的長連接還在,直接透傳,而kubelet認為是一個新的請求,直接響應返回結果給客戶端,導致kube-apiserver中的認證鑒權失效。
修復版本
好在目前并未發現針對該漏洞的實際應用,社區也已經在所有維護的版本緊急修復了這個漏洞,包括:
v1.10 | v1.11 | v1.12 | v1.13 |
v1.10.11 | v1.11.5 | v1.12.3 | v1.13.0 |
具體修復方法可以參考
https://github.com/kubernetes/kubernetes/pull/71412
簡單來說就是,在kube-apiserver端增加第一個請求的返回碼判斷邏輯,如果返回碼不是101,則直接請求失敗,關閉連接。
驗證方法
雖然目前還沒有發現針對該漏洞的應用,但是現在這個漏洞已經發布出來,很多人都掌握了這個漏洞的攻擊方法,所以趕快驗證下自己的環境有沒有問題,有問題就趕快修復吧。
https://github.com/gravitational/cve-2018-1002105/blob/master/main.go
大家下載下來,編包,然后配置好環境上的kubeconfig文件,執行二進制,如果當前環境還有這個漏洞,則會返回:
Testing for unauthenticated access...
Testing for privilege escalation...
> API is vulnerable to CVE-2018-1002105
如果沒有漏洞,執行結果中不會出現最后一行。
2.近期bug fix數據分析
本周更新近期(11/9-12/11)1.11版本的bug-fix數據及分析。
在關注的時間段內,1.11版本有24條bug-fix,其分布情況如圖所示:
從上圖可以看出,這段時間更新的bug fix干貨滿滿,apiserver相關的就有4條,另外還有kubelet/scheduler/controller等核心組件相關內容。
從嚴重程度來看,除了前文提到的高危漏洞外,還有8條比較嚴重的bug fix,需要大家重點關注。
Bug fix嚴重程度統計,2及以下的bug fix有15個,嚴重程度為3的bug fix有8個,需要重點關注。
3.1.11重要bug fix解讀
由于社區目前已停止維護1.9和1.10版本,建議大家盡快升級到1.11版本,本周也將開始更新1.11版本bug fix解讀。
1.11.1版本重要bug fix解讀信息:
4.重要bug fix解讀
1.9.9-1.9.10重要bug fix解讀:
來自:https://mp.weixin.qq.com/s/Yru-nOdVs5oOj9DICoApww