2022 年 Kubernetes 高危漏洞盤點
2022 年,Kubernetes繼續鞏固自己作為關鍵基礎設施領域的地位。從小型到大型組織,它已成為廣受歡迎的選擇。出于顯而易見的原因,這種轉變使 Kubernetes 更容易受到攻擊。但這還沒有結束,開發人員通常將Kubernetes 部署與其他云原生組件一起使用來構建一個完善的工作系統。不幸的是,這種組合會導致具有更多組件的更復雜的基礎架構。這最終會增加易受攻擊的表面積和范圍。
根據 Red Hat 的2022 年 Kubernetes 安全狀況報告:
https://www.redhat.com/rhdc/managed-files/cl-state-of-kubernetes-security-report-2022-ebook-f31209-202205-en.pdf,去年接受調查的人中有 93% 報告了至少一次影響 Kubernetes 環境的事件。在報告的全部安全事件中,53% 是由于配置錯誤造成的,38% 是由于利用漏洞造成的。該趨勢表明漏洞數量增加主要是由于攻擊面的增加和漏洞管理的復雜性。
在本文中,我們討論了 2022 年 Kubernetes 漏洞以及我們可以從中學到什么。為了確保我們都在同一頁面上,讓我們重溫一下 NIST SP 800-53中的標準漏洞定義:系統安全程序、設計、實施或內部控制中的缺陷或弱點可能會被執行(意外觸發或故意利用)并導致安全漏洞或違反系統安全政策。
在哪里尋找 Kubernetes 漏洞?
有各種受信任的數據源負責識別、收集和發布公共領域中的漏洞。主要有 NVD(國家漏洞數據庫)CVE 數據庫、GitHub 安全公告、Exploit-DB、供應商通知和官方項目公告。
以下是查找 Kubernetes 漏洞的來源列表:
- https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=kubernetes
- https://kubernetes.io/docs/reference/issues-security/official-cve-feed/
- https://groups.google.com/g/kubernetes-security-announce
- https://www.cvedetails.com/vulnerability-list/vendor_id-15867/product_id-34016/Kubernetes-Kubernetes.html
- https://github.com/advisories?query=kubernetes
Kubernetes相關漏洞分類
拒絕服務: 當合法用戶或客戶端由于惡意威脅行為者的行為而無法訪問服務或系統時,就會出現此漏洞。例如,假設有人正在通過大量請求您的Kubernetes API 服務器;API 服務器可能會停止響應其他合法請求。- 特權升級:某些系統弱點允許攻擊者在安全范圍內獲得未經授權的訪問。在 Kubernetes 中,容器逃逸是一個常見的弱點,當黑客利用它時,可以以提升的權限訪問主機。
- 繞過一些東西:這是一類漏洞的更廣泛術語,包括身份驗證繞過、執行代碼繞過、權限繞過等。
- 緩沖區溢出:通常,由于代碼中的錯誤(例如對越界內存緩沖區的處理不當),可能會發生緩沖區溢出。它允許惡意行為者訪問其他共同托管進程的內存并泄露不需要的信息。
- 任意代碼執行:
- 在這里,攻擊者利用代碼中的缺陷并使用它來執行任意惡意代碼,通常是為了獲得更高的訪問權限、網絡訪問權限或對主機系統的控制。
- 目錄或文件遍歷:利用此漏洞,黑客可以利用代碼中的弱點遍歷主機系統或網絡上的任意文件和目錄。
2022 主要漏洞盤點
1. CVE-2022-0811 – CRI-O 運行時中的容器轉義漏洞
今年早些時候, CrowdStrike安全研究人員披露了 Kubernetes 使用的容器運行時 CRI-O 中的這個漏洞,其 CVE 評分為 9.0(嚴重)。它允許具有訪問權限的惡意行為者在 Kubernetes 集群中創建 pod,以通過濫用 kernel.core_pattern 參數在主機上設置任意內核參數。該漏洞允許黑客逃離 Kubernetes 容器并獲得對主機的 root 訪問權限,從而可能使他們能夠部署惡意軟件、竊取數據并在集群中實現橫向移動。
(1) 漏洞詳細影響:
直接受影響的軟件 CRI-O 版本1.19 + 要確定主機是否受到影響:
雖然該漏洞存在于 CRI-O 中,但依賴它的軟件和平臺也可能存在漏洞,包括:
- OpenShift 4+
- 用于 Kubernetes 的 Oracle 容器引擎
https://www.crowdstrike.com/blog/cr8escape-new-vulnerability-discovered-in-cri-o-container-engine-cve-2022-0811/
(2) 預防措施:
- 使用策略來阻止對內核資源的不安全訪問,例如Pod Security Admission Controllers ,它已經從 Kubernetes 1.25取代了Pod Security Policies 。您還可以使用來自 Kyverno 的第三方準入控制器。
- 定期對集群進行掃描和審計,一旦發布補丁,第一時間修補漏洞。
2. CVE-2022-1708 – 通過 execSync 請求耗盡內存的節點 DOS
這又是 CRI-O 容器運行時中的一個漏洞,會導致節點上的內存或磁盤空間耗盡,從而影響系統可用性。它的 CVE 評分為 7.5(高)。任何有權訪問 Kubernetes API 的人都可以調用 execSync,它運行命令或從容器同步獲取日志。如果命令的輸出量很大,可能會把內存或磁盤填滿,導致節點或其他共管服務不可用。
CVE-2022-31030也類似于 CVE-2022-1708,但 CVE-2022-31030 是由于 containerd 容器運行時而不是 CRI-O。
(1) 漏洞詳細影響:
在 CRI-O 中發現了一個漏洞,該漏洞會導致任何有權訪問 Kube API 的人在節點上耗盡內存或磁盤空間。ExecSync 請求在容器中運行命令并記錄命令的輸出。命令執行后,CRI-O 會讀取此輸出,并以讀入與命令輸出對應的整個文件的方式讀取。因此,如果命令的輸出很大,則可能耗盡CRI-O 讀取命令輸出時節點的內存或磁盤空間。此漏洞的最大威脅是系統可用性。
https://nvd.nist.gov/vuln/detail/CVE-2022-1708
(2) 預防措施:
- 使用最小權限原則來降低被攻擊的風險。如果您不授予在 Pod 上運行“exec”命令的權限,或者不授予與 Kubernetes API 服務器交互的應用程序使用的服務帳戶的最低權限,黑客將無法利用該漏洞。
- 補丁發布后立即更新實施。
3. CVE-2022-29165 – ArgoCD 身份驗證繞過
這個得分最高為 10.0 的嚴重漏洞讓 ArgoCD 的用戶感到恐慌,ArgoCD 是一種流行的 GitOps 持續交付工具,用于在 Kubernetes 集群上部署應用程序。該漏洞允許未經身份驗證的用戶獲得匿名訪問權限,使他們能夠通過發送特制的 JSON Web 令牌 (JWT) 來冒充包括管理員在內的任何其他用戶。
利用很容易,因為攻擊者不需要 ArgoCD 中的任何帳戶。默認情況下,ArgoCD 服務帳戶獲得集群管理員角色,從而使攻擊者能夠完全訪問 Kubernetes 集群。
(1) 漏洞詳細影響:
如果啟用了對實例的匿名訪問,攻擊者可以:
提升他們的權限,有效地允許他們在集群上獲得與 Argo CD 實例相同的權限,在默認安裝中是集群管理員。這將允許攻擊者創建、操縱和刪除集群上的任何資源。
通過部署具有提升權限的惡意工作負載來泄露數據,從而繞過 Argo CD API 強制執行的敏感數據的任何編輯
該漏洞的補丁已經發布在以下 Argo CD 版本中:
- v2.3.4
- v2.2.9
- v2.1.15
https://github.com/argoproj/argo-cd/security/advisories/GHSA-r642-gv9p-2wjj
(2) 預防措施:
- 禁用對 ArgoCD 的匿名訪問。
- 遵循應用程序服務帳戶的最小權限原則。
- 將關鍵組件端點置于安全邊界之后,只有受信任的人才能訪問該邊界。
4. CVE-2022-23648 – Containerd 中的任意主機文件訪問
該漏洞存在于containerd版本 1.6.1、1.5.10 和 1.14.12 中,允許攻擊者讀取任意主機文件。因此,攻擊者可以讀取 kubelet 私鑰等機密文件,并可以訪問 Kubernetes API 服務器/etcd 數據庫來竊取信息。
(1) 漏洞詳細影響:
攻擊者最有吸引力的目標文件將是 kubelet 的私鑰,用于節點 kubelet 和 KubeAPI 服務器之間的通信。Kubelet 是 Kubernetes 中絕對可信的組件,它可以要求 KubeAPI 服務器提供存儲在 ETCD 中的任何信息,例如Kubernetes Secrets、ConfigMaps 等。這些信息可以被泄露或在本地使用,以訪問 ETCD 中受保護的接口和數據資產。Kubernetes 乃至整個云基礎設施。
https://nvd.nist.gov/vuln/detail/CVE-2022-23648
(2) 預防措施:
- 使用Kubescape等持續掃描解決方案來檢測漏洞。
- 補丁發布后立即實施。
5. CVE-2022-0185 – Linux 內核容器逃逸
Linux 中的文件上下文 API 中基于堆的緩沖區溢出缺陷會導致越界寫入。然后,具有本地訪問權限的惡意行為者可能會導致拒絕服務攻擊或在主機上運行任意代碼。要檢測 Kubernetes 中的此漏洞暴露,您需要找到具有 CAP_SYS_ADMIN 功能的 pod。
(1) 漏洞詳細影響:
該問題是“文件系統上下文”組件中的整數下溢問題。整數下溢發生在對無符號整數變量的減法低于零并且計算結果環繞整數的最大值而不是顯示負值時。當發生這種下溢時,大小檢查失敗,并且調用程序可以寫入超出內核空間中分配的 4kb 內存的范圍。使用這種“未綁定寫入”,攻擊者可以更改內核內存中的值,例如,將對自己的訪問權限添加到同一節點上運行的任何其他進程。
“文件系統上下文”在 Linux 內核掛載文件系統時使用。這已被“文件上下文 API”取代,但對于遺留支持,部分功能已向后移植,問題在于遺留參數的處理。非特權用戶本地進程(在啟用非特權用戶命名空間的情況下)或具有 CAP_SYS_ADMIN 特權的進程可能導致遺留代碼的調用,從而利用此漏洞。
預防措施:
- 限制 Kubernetes 部署中的容器功能。
- 部署成熟的檢測工具,可以快速發現您暴露并提醒您降低風險。
6. CVE-2022-39306 – 未經授權訪問 Grafana 代碼庫中的任意端點
Grafana Labs針對其開源產品中的一個新的嚴重漏洞發布了安全公告。該漏洞標記為CVE-2022-39328,可讓攻擊者繞過任意服務端點的授權。這是一個繞過身份驗證的嚴重漏洞。大約 50% 的 Kubernetes 用戶在生產中使用 Grafana 這一事實使得這個 CVE 特別值得注意。
(1) 漏洞詳細影響:
未經身份驗證的用戶可以惡意查詢任意端點。
https://grafana.com/blog/2022/11/08/security-release-new-versions-of-grafana-with-critical-and-moderate-fixes-for-cve-2022-39328-cve-2022-39307-and-cve-2022-39306/
(2) 預防措施:
- Grafana 發布了一個修復:版本 9.2.4。
總結
容器逃逸是 Kubernetes 中最常被利用的漏洞之一。在 Kubernetes 部署中實施 AppArmor 和 SELinux 等安全配置文件以及 Pod 安全標準可以減少遭受攻擊的風險。
在為您的服務帳戶和用戶分配角色和權限時,請遵循最小權限原則。這減少了攻擊者在集群上獲得過多特權的機會,即使他們已經滲透了它。利用Kubescape門戶中的RBAC 可視化工具來檢測具有不必要權限的角色和參與者。
使用縱深防御技術使惡意行為者更難實現橫向移動和泄露數據。
建議對K8s 清單文件、代碼存儲庫和集群進行頻繁且持續的掃描以查找漏洞。
建立一個流程來定期更新 Kubernetes 集群上的軟件包。使用gVisor等容器沙箱項目,可以通過在多租戶系統中提供強隔離來加強容器邊界并防止容器逃逸和特權升級。