文档首页/ 云容器引擎 CCE/ 服务公告/ 漏洞公告/ 修复Docker操作系统命令注入漏洞公告(CVE-2019-5736)
更新时间:2023-08-02 GMT+08:00

修复Docker操作系统命令注入漏洞公告(CVE-2019-5736)

漏洞详情

Docker、containerd或者其他基于runc的容器运行时存在安全漏洞,攻击者可以通过特定的容器镜像或者exec操作可以获取到宿主机的runc执行时的文件句柄并修改掉runc的二进制文件,从而获取到宿主机的root执行权限。

华为云容器引擎已修复runc漏洞CVE-2019-5736。

表1 漏洞信息

漏洞类型

CVE-ID

漏洞级别

披露/发现时间

华为云修复时间

代码执行

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容器服务提供的补丁针对官方补丁进行了优化适配,已验证在多版本内核上均可生效。