目前狀態:2019 年 Kubernetes 第三方安全稽核
我們預期 Kubernetes 全新第三方安全稽核將於本月稍晚(2022 年 10 月)發布。
為了準備,讓我們看看上次 2019 年第三方安全稽核中公開的調查結果狀態,該稽核基於 Kubernetes v1.13.4。
動機
Craig Ingram 多年來一直熱心嘗試追蹤上次稽核中報告的調查結果狀態,詳見此議題:kubernetes/kubernetes#81146。這篇部落格文章將嘗試更深入探討此問題,解決追蹤中的任何缺口,並成為 2019 年報告的調查結果狀態的即時摘要。
本文也應透過透明的溝通,協助讀者對社群為解決這些調查結果所做的工作建立信心,並浮現任何需要社群貢獻者協助的調查結果。
目前狀態
此處每個議題/調查結果的狀態皆以盡力而為的方式呈現。作者不聲稱狀態 100% 準確,如果目前狀態未準確反映,歡迎直接在相關議題上評論,以進行任何更正或意見回饋。
# | 標題 | 議題 | 狀態 |
---|---|---|---|
1 | hostPath PersistentVolumes 啟用 PodSecurityPolicy 繞過 | #81110 | 已關閉,已透過 kubernetes/website#15756 和 kubernetes/kubernetes#109798 解決 |
2 | Kubernetes 不支援憑證撤銷 | #81111 | 重複議題,與 #18982 相同,且需要 KEP |
3 | HTTPS 連線未經身分驗證 | #81112 | 大致上留給終端使用者練習,以設定正確的組態 |
4 | 將 PID 移動到管理員的 cgroup 時,透過 kubelet 發生 TOCTOU | #81113 | 需要節點存取才能成功利用。需要修正 |
5 | kubectl cp 中未正確修補的目錄遍歷 | #76788 | 已關閉,已指派 CVE-2019-11249,已在 #80436 中修正 |
6 | Bearer 權杖在記錄中洩露 | #81114 | 已關閉,已指派 CVE-2019-11250,已在 #81330 中修正 |
7 | Seccomp 預設為停用 | #81115 | 已關閉,已透過 #101943 解決 |
8 | 普遍可世界存取的文件權限 | #81116 | #112384(進行中) |
9 | 環境變數洩露敏感資料 | #81117 | 已關閉,已透過 #84992 和 #84677 解決 |
10 | SSH 連線中使用 InsecureIgnoreHostKey | #81118 | 此功能已在 v1.22 中移除:#102297 |
11 | 使用 InsecureSkipVerify 和其他 TLS 弱點 | #81119 | 需要 KEP |
12 | kubeadm 執行可能危險的重設操作 | #81120 | 已關閉,已透過 #81495、#81494 和 kubernetes/website#15881 修正 |
13 | 使用 strconv.Atoi 並向下轉換結果時發生溢位 | #81121 | 已關閉,已透過 #89120 修正 |
14 | kubelet 可能因惡意 manifest 造成記憶體不足錯誤 | #81122 | 已關閉,已透過 #76518 修正 |
15 | kubectl 可能因惡意 Pod 規格造成記憶體不足錯誤 | #81123 | 需要修正 |
16 | 不正確的 PID 擷取允許不正確的 cgroup 移動 | #81124 | 需要修正 |
17 | 執行 kube-apiserver 和 kubelet 的主機記錄目錄遍歷 | #81125 | 已關閉,已透過 #87273 修正 |
18 | 非恆定時間密碼比較 | #81126 | 已關閉,已透過 #81152 修正 |
19 | 加密建議不符合最佳實務 | #81127 | 工作中 |
20 | 預設將憑證新增至容器是不安全的 | #81128 | 已關閉,已透過 #89193 修正 |
21 | kubelet 存活探針可用於列舉主機網路 | #81129 | 需要 KEP |
22 | iSCSI 磁碟區儲存明文密碼在記錄中 | #81130 | 已關閉,已透過 #81215 修正 |
23 | 硬式編碼的憑證路徑 | #81131 | 已關閉,等待更多證據 |
24 | 記錄輪換不是原子性的 | #81132 | 需要修正 |
25 | 不限制的任意檔案路徑 | #81133 | 需要修正。 |
26 | 不安全的 JSON 建構 | #81134 | 部分修正 |
27 | kubelet 因未正確處理的錯誤而崩潰 | #81135 | 已關閉。已透過 #81135 修正 |
28 | 舊版權杖不會過期 | #81136 | 已關閉,已作為 #70679 的一部分修正 |
29 | CoreDNS 跨命名空間洩露內部叢集資訊 | #81137 | 已關閉,已透過 CoreDNS v1.6.2 解決。#81137(評論) |
30 | 服務使用有問題的預設函數 | #81138 | 需要修正 |
31 | 容器管理員中不正確的 docker daemon 程序名稱 | #81139 | 已關閉,已透過 #81083 修正 |
32 | 在任何地方都使用標準格式 | #81140 | 需要 KEP |
33 | 膚淺的健康檢查提供錯誤的安全感 | #81141 | 已關閉,已透過 #81319 修正 |
34 | 硬式編碼使用不安全的 gRPC 傳輸 | #81142 | 需要 KEP |
35 | 不正確處理 Retry-After | #81143 | 已關閉,已透過 #91048 修正 |
36 | 不正確的 isKernelPid 檢查 | #81144 | 已關閉,已透過 #81086 修正 |
37 | Kubelet 支援不安全的 TLS 加密套件 | #81145 | 已關閉,但 #91444 需要修正(請參閱 此評論) |
啟發的成果
除了修正特定議題外,2019 年第三方安全稽核也促使 Kubernetes 在接下來幾個版本中更注重安全性的增強功能。其中一個範例是 Kubernetes 增強提案 (KEP) 1933 透過靜態分析防禦記錄機密,以防止使用 Patrick Rhomberg 驅動實作將機密洩露到記錄中。由於此 KEP,go-flow-levee
,一個配置為偵測機密記錄的汙染傳播分析工具,在 script 中作為 Prow 預提交作業執行。此 KEP 在 v1.20.0 中作為 Alpha 功能引入,然後在 v1.21.0 中升級為 Beta,並在 v1.23.0 中升級為穩定版。作為穩定版,分析作為封鎖預提交測試執行。此 KEP 也協助解決 2019 年第三方安全稽核中的以下議題
剩餘工作
在過去 3 年中,我們社群成員的工作已修正已識別的 37 項調查結果中的許多項。但是,我們仍有一些工作要做。以下是剩餘工作的細目,以及修正這些待處理議題所需時間投入、複雜性和對生態系統的好處的粗略估計。
注意
任何需要 KEP(Kubernetes 增強提案)的事項都被視為高時間投入和高複雜性。對生態系統的好處大致相當於保持調查結果未修正的風險,這取決於嚴重性層級 + 成功漏洞利用的可能性。下表中的這些估計值和數值是作者的個人意見。個人或終端使用者的威脅模型可能會將修正特定議題的好處評估為更高或更低。標題 | 議題 | 時間投入 | 複雜性 | 對生態系統的好處 |
---|---|---|---|---|
Kubernetes 不支援憑證撤銷 | #81111 | 高 | 高 | 中 |
使用 InsecureSkipVerify 和其他 TLS 弱點 | #81119 | 高 | 高 | 中 |
kubectl 可能因惡意 Pod 規格造成本機記憶體不足錯誤 | #81123 | 中 | 中 | 中 |
不正確的 PID 擷取允許不正確的 cgroup 移動 | #81124 | 中 | 中 | 中 |
kubelet 存活探針可用於列舉主機網路 | #81129 | 高 | 高 | 中 |
API 伺服器支援不安全的 TLS 加密套件 | #81145 | 中 | 中 | 低 |
將 PID 移動到管理員的 cgroup 時,透過 kubelet 發生 TOCTOU | #81113 | 中 | 中 | 低 |
記錄輪換不是原子性的 | #81132 | 中 | 中 | 低 |
不限制的任意檔案路徑 | #81133 | 中 | 中 | 低 |
服務使用有問題的預設函數 | #81138 | 中 | 中 | 低 |
在任何地方都使用標準格式 | #81140 | 高 | 高 | 非常低 |
硬式編碼使用不安全的 gRPC 傳輸 | #81142 | 高 | 高 | 非常低 |
若要開始修正任何這些需要協助的調查結果,請考慮參與 Kubernetes SIG Security,方法是加入我們的雙週會議,或在我們的 Slack 頻道上與我們交流。