Notice of Fixing the Docker Command Injection Vulnerability (CVE-2019-5736)
Description
Runtimes such as Docker and containerd that sit on top of runC have a security vulnerability. This vulnerability allows attackers to obtain the file descriptor handled in runC of the host and overwrite the host runC binary by leveraging the ability to execute a command as root within a new container with a specific image or an existing container that can be attached with docker exec.
The runC vulnerability CVE-2019-5736 has been fixed in Huawei Cloud CCE.
| Type | CVE-ID | Severity | Discovered | Fixed by Huawei Cloud |
|---|---|---|---|---|
| Code execution | High | 2019-02-11 | 2019-02-12 |
For details about CVE-2019-5736, see https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736.
Impact
Attacker-controlled images inject malicious functions into a malicious dynamic library such as libseccomp.so.2 and make execution commands point to /proc/self/exe.
When runC is performing a dynamic compilation, it loads the dynamic link libraries from the attacker-controlled container images and consequently the malicious dynamic library is loaded. Running the /proc/self/exe (runC) will execute the malicious program in the malicious dynamic link library. Since the malicious program inherits the file handle opened by runC, it can replace runC on the host using this file handle.
Then, executing runC-related commands allows for container escape.
The impact of this vulnerability is as follows:
- runC is the core component of Docker containers. This vulnerability affects all runC containers. The impact of this vulnerability is often observed in multi-tenant clusters. If multiple users share nodes, any of the users may exploit this vulnerability to control the nodes and attack the entire cluster through penetration.
- CCE
The Kubernetes clusters created by CCE are tenant-specific and cannot be shared by multiple tenants. Therefore, this vulnerability has little impact on Kubernetes clusters.
CCE uses Huawei Docker containers, which are free from this vulnerability because the runC uses static compilation.
- Cloud Container Instance (CCI)
CCI uses the Huawei Kata container runtimes to ensure hypervisor-level isolation between containers running on the same node. Because CCI does not rely on runC as the container runtimes, the associated vulnerability does not impact CCI.
Solution
- CCE
The runC vulnerability CVE-2019-5736 has been fixed in the container runtimes used in Huawei Cloud CCE containers.
- On-premises Kubernetes or open-source container runtime
- Upgrade Docker to 18.09.2. If the current Docker version is an open-source version earlier than 17.06, the upgrade may interrupt container services. This is because significant changes (including architectural decoupling and restructuring) were made to open-source Docker versions later than 17.06. To minimize the container service downtime, intensively verify the upgrade plan before starting the upgrade and perform a rolling upgrade node by node.
- Upgrade only runC. For Docker versions 17.06 and earlier, upgrading runC will not interrupt services. Currently, there is no vulnerability-fixing version of runC. If you want to upgrade runC separately, you can compile it by yourself.
- The official Docker patch uses the system call provided by Linux kernel 3.17 or later. The patch may not work with certain old versions of Linux kernel. If the patch does not work, upgrade Linux kernel to 3.17 or later. The security patch provided by Huawei Cloud CCE evolves out of the official Docker patch and has been verified to work well on multiple versions of Linux kernel.
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.