# CVE-2019-5736

UK8S已于2019年2月14日15:00修复runc容器逃逸漏洞，并通过攻防测试。本文主要介绍2019年2月14日之前创建的集群修复办法。

## 漏洞详情

runc被曝存在容器逃逸漏洞。该漏洞允许恶意容器(以最少的用户交互)覆盖host上的runc文件，从而在host上以root权限执行代码。在下面两种情况下，通过用户交互可以在容器中以root权限执行任意代码：
1.使用攻击者控制的镜像创建新容器。 2.进入到攻击者之前具有写入权限的现有容器中(docker exec)。

## 影响范围

** 2019年2月14日15:00之前创建的集群**

此批集群的Docker版本为1.13.1，runc版本<1.0-rc6，存在安全隐患，需要修复。

2019年2月14日15:00之后创建的集群已修复该漏洞，并已通过攻防测试无需担心。

> 由于UK8S为单租户模式，如果之前未在UK8S集群内部署未经审查的第三方镜像，该漏洞无法被黑客被利用，但为了业务安全，建议尽早修复。

## 修复方案

**方案一**

对于测试用集群，建议删除后重新创建，新版本UK8S集群已修复该漏洞（CVE-2019-5736）;

**方案二**

仅升级runc版本，该方案为热升级方案，理论上不会导致业务中断，具体方案如下：

1.备份原有runc，UK8S的runc位于/usr/libexec/docker路径下。

```
mv /usr/libexec/docker/docker-runc-current /usr/libexec/docker/docker-runc-current.$(date -Iseconds)
```

2.下载修复的runc版本（对应的容器版本为1.13.1，内核版本为4.x），并替换原有的runc。

```
wget https://github.com/rancher/runc-cve/releases/download/CVE-2019-5736-build3/runc-v1.13.1-amd64
mv runc-v1.13.1-amd64  /usr/libexec/docker/docker-runc-current

##内核版本为3.x
wget https://github.com/rancher/runc-cve/releases/download/CVE-2019-5736-build3/runc-v1.13.1-amd64-no-memfd_create
```

3.配置可执行权限

```
chmod +x /usr/libexec/docker/docker-runc-current
```

4.测试新版本runc是否正常工作

```
/usr/libexec/docker/docker-runc-current -v
docker run -it --rm ubuntu echo OK
```

**方案三**

升级Docker版本。将已有集群的Docker版本升级到18.09.2或以上。该方案会导致容器和业务中断，请谨慎操作。

如在该漏洞过程中需要协助，请联系UK8S团队协助处理。

## 参考链接

https://www.openwall.com/lists/oss-security/2019/02/11/2

https://kubernetes.io/blog/2019/02/11/runc-and-cve-2019-5736/
