Docker、containerd或者其餘基於runc的容器在運行時存在安全漏洞,攻擊者能夠經過特定的容器鏡像或者exec操做獲取到宿主機runc執行時的文件句柄並修改掉runc的二進制文件,從而獲取到宿主機的root執行權限。docker
更多漏洞CVE-2019-5736的詳細信息,請參見https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736。ubuntu
阿里雲容器服務已修復該runc漏洞。安全
影響範圍less
對於阿里雲容器服務而言,影響範圍以下:Docker版本 < 18.09.2 的全部Docker Swarm集羣和Kubernetes集羣(不包含Serverless Kubernetes集羣)curl
對於用戶自建的Docker/Kubernetes環境而言,影響範圍以下:Docker版本 < 18.09.2 或者使用 runc版本 <= 1.0-rc6的環境。請自行根據廠商建議進行修復。測試
解決方法阿里雲
新建Kubernetes1.11或1.12集羣。容器服務新建立的1.11或1.12版本的Kubernetes集羣已經包含修復該漏洞的Docker版本。url
升級Docker。升級已有集羣的Docker到18.09.2或以上版本。該方案會致使容器和業務中斷。get
僅升級runc(針對Docker版本17.06)。爲避免升級Docker引擎形成的業務中斷,能夠按照如下步驟,逐一升級集羣節點上的runc二進制。it
i 執行如下命令定位docker-runc。docker-runc一般位於/usr/bin/docker-runc路徑下
which docker-runc
ii 執行如下命令備份原有的runc:
mv /usr/bin/docker-runc /usr/bin/docker-runc.orig.$(date -Iseconds)
iii 執行如下命令下載修復的runc:
curl -o /usr/bin/docker-runc -sSL https://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/runc/docker-runc-17.06-amd64
iv 執行如下命令設置docker-runc的可執行權限:
chmod +x /usr/bin/docker-runc
v 執行如下命令測試runc是否能夠正常工做:
docker-runc -v
# runc version 1.0.0-rc3
# commit: fc48a25bde6fb041aae0977111ad8141ff396438
# spec: 1.0.0-rc5
docker run -it --rm ubuntu echo OK
vi 若是是GPU的節點,還須要完成如下步驟額外安裝下nvidia-runtime。
# 找到nvidia-container-runtime的位置,通常狀況下在: /usr/bin/nvidia-container-runtime
which nvidia-container-runtime
# 備份原有的nvidia-container-runtime
mv /usr/bin/nvidia-container-runtime /usr/bin/nvidia-container-runtime.orig.$(date -Iseconds)
# 下載修復的nvidia-container-runtime
curl -o /usr/bin/nvidia-container-runtime -sSL https://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/runc/nvidia-container-runtime-17.06-amd64
# 設置它的可執行權限
chmod +x /usr/bin/nvidia-container-runtime
# 測試nvidia-container-runtime能夠正常工做
nvidia-container-runtime -v
# runc version 1.0.0-rc3
# commit: fc48a25bde6fb041aae0977111ad8141ff396438-dirty
# spec: 1.0.0-rc5
docker run -it --rm -e NVIDIA_VISIBLE_DEVICES=all ubuntu nvidia-smi -L
# GPU 0: Tesla P100-PCIE-16GB (UUID: GPU-122e199c-9aa6-5063-0fd2-da009017e6dc)
# 本測試運行在GPU P100機型中,不一樣GPU型號會有區別。