近日Linux社區披露了編號為CVE-2020-14386的核心漏洞。該漏洞源自packet socket包中的漏洞,攻擊者可以通過漏洞實現越界寫,能夠寫的長度為1~10個位元組(來自漏洞發現者描述),除了可能造成提權和容器逃逸等風險,該攻擊還可能造成叢集節點記憶體耗盡並影響節點上啟動並執行業務應用。
Linux社區披露編號為CVE-2020-14386的核心漏洞,詳情請參見CVE-2020-14386。
影響範圍
叢集節點核心版本高於4.6的不同作業系統的Linux發行版均在此次漏洞的影響範圍內,包括:
Ubuntu Bionic (18.04) and newer
Debian 9
Debian 10
CentOS 8/RHEL 8
對於Container ServiceACK叢集:
如果您的叢集節點作業系統選擇的是Alibaba Cloud Linux 2(核心版本為4.19.91-19.1.al7),您的叢集會受到此次漏洞的影響。
如果您的叢集節點作業系統是CentOS,由於當CentOS核心版本較低(3.10.0-1062),不在此漏洞影響範圍內。
漏洞影響
CVE-2020-14386是核心af_packet模組中存在的記憶體溢出漏洞。漏洞觸發需要CAP_NET_RAW許可權。非Root使用者沒有該許可權,但是在高版本Linux(核心版本高於4.6)上非特權使用者能夠建立user namespace,在該user namespace中會有CAP_NET_RAW許可權。K8s或Docker容器預設具有CAP_NET_RAW許可權,在高版本Linux中也存在觸發該漏洞的可能。該漏洞能夠允許攻擊者實現越界寫,能夠寫的長度為1~10個位元組(來自漏洞發現者描述),可能造成提權或容器逃逸。Alibaba Cloud Linux 2的官方公告請參見漏洞公告 | Linux核心漏洞(CVE-2020-14386)。Alibaba Cloud Linux 2.1903安全性漏洞修複資訊,請參見Security Advisories 。
防範措施
在容器應用中通過securityContext刪除CAP_NET_RAW許可權,從而可以阻止進入到容器觸發此漏洞。
spec: containers: - name: target-container ... securityContext: capabilities: drop: - NET_RAW觸發此漏洞的前提是攻擊者具有CAP_NET_RAW許可權,而大多數容器應用情境並不需要CAP_NET_RAW許可權,可以通過PodSecurityPolicy(PSP)策略強制校正Pod中是否刪除了CAP_NET_RAW許可權對應的核心能力,以下為PSP原則範本。
說明在ACKContainer Service控制台可以開啟PSP特性,並建立和綁定PSP策略。
apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: no-cap-net-raw spec: requiredDropCapabilities: - NET_RAW ...通過組件管理安裝gatekeeper組件,並確保已經安裝了官方的constraint template。此時您可以建立下面的約束執行個體來限制容器應用中對CAP_NET_RAW的使用。
# Dropping CAP_NET_RAW with Gatekeeper # (requires the K8sPSPCapabilities template) apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPCapabilities metadata: name: no-cap-net-raw spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: #List of namespaces to enforce this constraint on - default # If running gatekeeper >= v3.1.0-beta.5, # you can exclude namespaces rather than including them above. excludedNamespaces: - kube-system parameters: requiredDropCapabilities: - "NET_RAW"Alibaba Cloud Linux 2已經發布關於本漏洞的最新公告和相關升級說明,如果您的節點使用的是Alibaba Cloud Linux 2作業系統,建議您參照下列步驟升級核心版本。
執行命令
yum -y install kernel-4.19.91-21.2.al7,升級核心至修複版本。 或執行命令yum -y update kernel,直接升級至最新核心。重啟系統,使新核心生效。如果節點上有正在啟動並執行單點服務,請選擇非業務高峰時段將節點排水後再重啟節點。
更多Alibaba Cloud Linux 2.1903安全性漏洞修複資訊,請參考Security Advisories 。