-
Notifications
You must be signed in to change notification settings - Fork 14.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
First pass on a blog post about CVE-2019-5736. #12592
Merged
k8s-ci-robot
merged 7 commits into
kubernetes:master
from
coderanger:coderanger/runc-cve-2019-5736-blog-post
Feb 12, 2019
+88
−0
Merged
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
f48d726
First pass on a blog post about CVE-2019-5736.
coderanger 3858bc2
Clarify that k8s is not the problem.
coderanger 51a511d
Fix example of pinning to an image hash.
zparnold 7a98ebf
Add links to the rest of the notices or releases.
coderanger b9e0091
Add ways to get more info.
coderanger 569cfc3
RHEL link for those that don't selinux.
coderanger cbb745c
Link to Rancher's back ports.
coderanger File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
--- | ||
title: Runc and CVE-2019-5736 | ||
date: 2019-02-11 | ||
--- | ||
|
||
This morning [a container escape vulnerability in runc was announced](https://www.openwall.com/lists/oss-security/2019/02/11/2). We wanted to provide some guidance to Kubernetes users to ensure everyone is safe and secure. | ||
|
||
## What Is Runc? | ||
|
||
Very briefly, runc is the low-level tool which does the heavy lifting of spawning a Linux container. Other tools like Docker, Containerd, and CRI-O sit on top of runc to deal with things like data formatting and serialization, but runc is at the heart of all of these systems. | ||
|
||
Kubernetes in turn sits on top of those tools, and so while no part of Kubernetes itself is vulnerable, most Kubernetes installations are using runc under the hood. | ||
|
||
### What Is The Vulnerability? | ||
|
||
While full details are still embargoed to give people time to patch, the rough version is that when running a process as root (UID 0) inside a container, that process can exploit a bug in runc to gain root privileges on the host running the container. This then allows them unlimited access to the server as well as any other containers on that server. | ||
|
||
If the process inside the container is either trusted (something you know is not hostile) or is not running as UID 0, then the vulnerability does not apply. It can also be prevented by SELinux, if an appropriate policy has been applied. RedHat Enterprise Linux, CentOS, and Fedora all include appropriate SELinux permissions with their packages and so are believed to be unaffected. | ||
|
||
The most common source of risk is attacker-controller container images, such as unvetted images from public repositories. | ||
|
||
### What Should I Do? | ||
|
||
As with all security issues, the two main options are to mitigate the vulnerability or upgrade your version of runc to one that includes the fix. | ||
|
||
As the exploit requires UID 0 within the container, a direct mitigation is to ensure all your containers are running as a non-0 user. This can be set within the container image, or via your pod specification: | ||
|
||
```yaml | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: run-as-uid-1000 | ||
spec: | ||
securityContext: | ||
runAsUser: 1000 | ||
# ... | ||
``` | ||
|
||
This can also be enforced globally using a PodSecurityPolicy: | ||
|
||
```yaml | ||
apiVersion: policy/v1beta1 | ||
kind: PodSecurityPolicy | ||
metadata: | ||
name: non-root | ||
spec: | ||
privileged: false | ||
allowPrivilegeEscalation: false | ||
runAsUser: | ||
# Require the container to run without root privileges. | ||
rule: 'MustRunAsNonRoot' | ||
``` | ||
|
||
Setting a policy like this is highly encouraged given the overall risks of running as UID 0 inside a container. | ||
|
||
Another potential mitigation is to ensure all your container images are vetted and trusted. This can be accomplished by building all your images yourself, or by vetting the contents of an image and then pinning to the image version hash (`image: external/someimage@sha256:7832659873hacdef`). | ||
|
||
Upgrading runc can generally be accomplished by upgrading the package `runc` for your distribution or by upgrading your OS image if using immutable images. This is a list of known safe versions for various distributions and platforms: | ||
|
||
* Ubuntu - [`runc 1.0.0~rc4+dfsg1-6ubuntu0.18.10.1`](https://people.canonical.com/~ubuntu-security/cve/2019/CVE-2019-5736.html) | ||
* Debian - [`runc 0.1.1+dfsg1-2`](https://security-tracker.debian.org/tracker/CVE-2019-5736) | ||
* RedHat Enterprise Linux - [`docker 1.13.1-91.git07f3374.el7`](https://access.redhat.com/security/vulnerabilities/runcescape) (if SELinux is disabled) | ||
* Amazon Linux - [`docker 18.06.1ce-7.25.amzn1.x86_64`](https://alas.aws.amazon.com/ALAS-2019-1156.html) | ||
* CoreOS - [`2051.0.0`](https://coreos.com/releases/#2051.0.0) | ||
* Kops Debian - [in progress](https://github.com/kubernetes/kops/pull/6460) | ||
* Docker - [`18.09.2`](https://github.com/docker/docker-ce/releases/tag/v18.09.2) | ||
|
||
Some platforms have also posted more specific instructions: | ||
|
||
#### Google Container Engine (GKE) | ||
|
||
Google has issued a [security bulletin](https://cloud.google.com/kubernetes-engine/docs/security-bulletins#february-11-2019-runc) with more detailed information but in short, if you are using the default GKE node image then you are safe. If you are using an Ubuntu or CoreOS node image then you will need to mitigate or upgrade to an image with a fixed version of runc. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Note that GKE does not support running with CoreOS images. |
||
|
||
#### Amazon Elastic Container Service for Kubernetes (EKS) | ||
|
||
Amazon has also issued a [security bulletin](https://aws.amazon.com/security/security-bulletins/AWS-2019-002/) with more detailed information. All EKS users should mitigate the issue or upgrade to a new node image. | ||
|
||
### Docker | ||
|
||
We don't have specific confirmation that Docker for Mac and Docker for Windows are vulnerable, however it seems likely. Docker has released a fix in [version 18.09.2](https://github.com/docker/docker-ce/releases/tag/v18.09.2) and it is recommended you upgrade to it. This also applies to other deploy systems using Docker under the hood. | ||
|
||
If you are unable to upgrade Docker, the Rancher team has provided backports of the fix for many older versions at [github.com/rancher/runc-cve](https://github.com/rancher/runc-cve). | ||
|
||
## Getting More Information | ||
|
||
If you have any further questions about how this vulnerability impacts Kubernetes, please join us at [discuss.kubernetes.io](https://discuss.kubernetes.io/). | ||
|
||
If you would like to get in contact with the [runc team](https://github.com/opencontainers/org/blob/master/README.md#communications), you can reach them on [Google Groups](https://groups.google.com/a/opencontainers.org/forum/#!forum/dev) or `#opencontainers` on Freenode IRC. |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The official announcement explicitly calls out that the default Fedora policy is still vulnerable. Any reason to think otherwise?