內容提要:
1. 高危漏洞CVE-2018-1002105深度解讀
2. 11/19--12/11 bug fix彙總分析
3. 1.11重要bug fix解讀
4. 1.9重要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 1.9 重要bug fix解讀
1.9.9-1.9.10重要bug fix解讀: