
# 修复Docker操作系统命令注入漏洞公告（CVE-2019-5736）
#### 漏洞详情
Docker、containerd或者其他基于runc的容器运行时存在安全漏洞，攻击者可以通过特定的容器镜像或者exec操作可以获取到宿主机的runc执行时的文件句柄并修改掉runc的二进制文件，从而获取到宿主机的root执行权限。
**华为云容器引擎已修复runc漏洞CVE-2019-5736。**
表1漏洞信息 
| 漏洞类型 | CVE-ID                                                                        | 漏洞级别 | 披露/发现时间    | 华为云修复时间    |
|:---|:---|:---|:---|:---|
| 代码执行 | [CVE-2019-5736](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736) | 高    | 2019-02-11 | 2019-02-12 |
   
漏洞CVE-2019-5736的详细信息，请参见：<https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736>
#### 漏洞影响
本次漏洞典型的攻击方式是通过恶意镜像：在恶意镜像中，将攻击函数隐藏在恶意动态库如（libseccomp.so.2）中，并使执行命令指向/proc/self/exe。
当runc动态编译时，会从容器镜像中载入动态链接库，导致加载恶意动态库；当打开/prco/self/exe即runc时，会执行恶意动态链接库中的恶意程序，由于恶意程序继承runc打开的文件句柄，可以通过该文件句柄替换host上的runc。
此后，再次执行runc相关的命令，则会产生逃逸。
该漏洞影响范围如下：
- 本次漏洞对所有采用runc的容器运行时均生效，runc是Docker容器的核心组件，因此对绝大部分容器均会产生影响。其中主要影响的是多用户共享节点的场景，可导致某用户通过渗透进而控制节点并攻击整集群。
- **华为云CCE容器服务：**
  CCE容器服务创建的Kubernetes集群属于单租户专属，不存在跨租户共享，影响范围较小，对于多用户场景需要关注。
  当前CCE采用华为优化的Docker容器，其中RUNC采用静态编译，目前公开披露的攻击方法无法成功入侵。
  
- **华为云CCI容器实例服务：**
  CCI引擎采用华为Kata容器运行时，提供单节点上多容器高安全的hypervisor级别的隔离能力，并没有采用runc容器，因此本次漏洞将不会对CCI产生影响。
  
 
#### 漏洞修复方案
- 华为云CCE容器服务： **华为云容器运行时已修复runc漏洞CVE-2019-5736。**
  
- 自建Kubernetes或使用开源容器运行时：
  - 升级Docker到18.09.2版本，由于开源Docker在17.06之后的版本做了较大变更，涉及架构解耦重构，该办法可能会导致用户容器业务中断，建议做好充分验证，并按节点逐步滚动升级。
  
  - 仅升级runc，对于17.06等Docker版本，可以不中断已运行业务，当前runc官方尚未发布包含漏洞修复补丁的新版本，如果要单独升级runc，用户可自行编译。
  
  - 另特别提醒，本次Docker官方补丁使用了高版本Linux内核的系统调用，在低版本内核部分版本上可能会失效，若补丁失效时，建议升级至3.17以上内核。华为云CCE容器服务提供的补丁针对官方补丁进行了优化适配，已验证在多版本内核上均可生效。
   
 
