Sensitive security-related questions, comments, and reports should be sent to the gvisor-security@googlegroups.com (gvisor-security mailing list). You should receive a prompt response, typically within 48 hours.
In general, we only assign CVEs for issues that meet all of the criteria:
Since gVisor is a container security platform, its main security focus is on preventing a user workload from “getting out of the box”, relative to issues that remain within the proverbial box. Therefore, security issues that remain contained to a single sandbox are generally not considered critical and are not given CVE numbers by default. If you would still like to get a CVE number issued, you may report it to BugHunter.
gVisor is an open-source sandboxing solution meant to be generally useful, and this document describes its policy for reporting security vulnerabilities relevant to that context. This is why many categories of security issues are not relevant from gVisor-the-project’s perspective. However, gVisor is also used in many production contexts, which may have their own security vulnerability disclosure programs that may accept gVisor misconfigurations or incomplete policies as being security incidents from their perspective.
For example, while gVisor-the-project’s security policy considers control over a
sandbox’s OCI spec as largely out-of-scope from gVisor’s perspective, some
managed Kubernetes environments such as
GKE Sandbox
under
Autopilot
rely on gVisor and enforce some security policies on the PodSpec that
ultimately ends up being provided to gVisor. Therefore, a vulnerability that
would not be considered a CVE for gVisor-the-project as per this security policy
may still be considered a vulnerability in that gVisor production deployment.
What this means for you: If you find a security flaw in a gVisor-sandboxed environment, consider whether the security vulnerability generally exists in gVisor itself or whether it is specific to the production deployment of gVisor where you have found this vulnerability, and route your report accordingly.
The rest of this policy assumes that you have made the assertion that the security issue affects gVisor in general.
We distinguish the following type of issues, listed from most to least severe:
Escape: Container escapes. Issues that allow arbitrary code to run
on the host machine.
HostLeak: Host data access. Issues that allow reading arbitrary
files or file metadata from the host other than those intended to be
visible to the sandbox.Exfil: Data exfiltration. Issues that allow sending data outside
of the sandbox in ways that the sandbox configuration was meant to
protect against.
Lateral: Sandbox-to-sandbox lateral movement. Issues that allow an
attacker to execute arbitrary code execution in a sandbox on the same
host other than the one they started with.HostDoS: Denial-of-service attacks that affect the host kernel
(e.g. trigger a host kernel panic).PeerDoS: Denial-of-service attacks that affect other sandboxes
on the same host.
InternalEsc: In-sandbox escalation that results in arbitrary
in-sandbox code execution. Being able to run arbitrary code as
in-sandbox root.InternalRead: In-sandbox escalation that results in arbitrary
in-sandbox reads. Being able to read what in-sandbox root would be
able to read.SelfDoS: Denial-of-service attacks that affect a single sandbox
and are triggerable from user code running in that sandbox.Integrity: Data integrity issues relative to Linux behavior.
We distinguish the following levels of prerequisites surrounding the level of initial access and privileges that the attacker may start with, from least-privileged to most-privileged:
Remote: Control over incoming traffic into the sandbox. Attacker does
not have control over the sandbox, but can open network connections to its
network stack.SandboxUser: Control over non-root process in sandbox. Attacker has
control over a process running as non-root user within the sandbox (i.e. can
cause this process to execute arbitrary code), but not over other in-sandbox
processes, nor how the sandbox is configured or resource-restricted on the
host.SandboxRoot: Control over sandboxed workload. Attacker has root inside
the sandbox (i.e. can cause any in-sandbox process to execute arbitrary code
as root), but not how the sandbox is configured or resource-restricted on
the host.
SandboxRoot implies SandboxUser, as root-in-sandbox is able to
impersonate every other in-sandbox user.SandboxImage: Control over container image. Attacker has control over
the root filesystem image used inside the sandbox, but no other bits of
configuration. Implies SandboxRoot.
ext4
filesystem.SandboxImage implies SandboxRoot, as controlling the image allows
adding setuid binaries and overwriting the workload’s default binary
to execute arbitrary code as root in the sandbox.SandboxSpec: Control over OCI spec configuration. Attacker has control
over the OCI spec that the sandbox uses. This includes control over host
mountpoints beyond the root filesystem image, as well as resource limits.
SandboxSpec implies SandboxImage, as the image is part of the spec
and can be pointed to an attacker-controlled image name.RuntimeFlags: Control over gVisor runtime configuration. Attacker has
control over the set of flags that is used when starting any gVisor
sandbox on the host.
RuntimeFlags implies SandboxSpec, as runtime flags can affect
gVisor’s security measures and the finalized per-sandbox configuration.HostRoot: Control over host. Attacker has full control over the host
that sandboxes run on.
HostRoot implies RuntimeFlags, since root can change the runtime
configuration at will.The following table lists the types of issues that qualify for CVEs, provided that they are gVisor-specific (i.e. the same issue does not occur in a non-gVisor sandbox):
| CVE? | Remote |
SandboxUser |
SandboxRoot |
SandboxImage |
SandboxSpec |
RuntimeFlags |
HostRoot |
|---|---|---|---|---|---|---|---|
Integrity |
✔️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
SelfDoS |
N/A | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
InternalRead |
N/A | ❌ | N/A | ❌ | ❌ | ❌ | ❌ |
InternalEsc |
N/A | ✔️ | N/A | ❌ | ❌ | ❌ | ❌ |
PeerDoS |
✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
HostDoS |
✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
Lateral |
N/A | ✔️ | ✔️ | ❌ | ❌ | ❌ | ❌ |
Exfil |
✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
HostLeak |
✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
Escape |
✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
SandboxRoot / Escape.SandboxRoot / HostLeak.SandboxSpec / HostLeak.SandboxUser / SelfDoS./etc/passwd) preventing
administrative SSH logins to the host.
SandboxRoot / HostDoS./var/run/docker.sock UDS within a sandbox,
then creates unsandboxed containers by using this UDS.
SandboxConf / Escape./var/run/docker.sock to do so,
which secure deployments of gVisor do not expose. Additionally, running
the same container with runc allows for container escape in the same
manner.Remote / PeerDoS.SandboxRoot / PeerDoS.SandboxUser / InternalEsc.SandboxImage / InternalEsc.SandboxUser / InternalEsc.SandboxRoot / Lateral.runsc runtime
to not actually use gVisor.
HostRoot / Escape.runsc runtime flags to --network=host, then uses a
Linux network stack exploit from inside a gVisor sandbox to escalate to root
on the host.
RuntimeFlags / Escape./etc/shadow file, locking out the host’s system administrator.
SandboxRoot / HostDoS./srv/www/secrets.txt file, despite none of the host
directories being mounted into the sandbox.
SandboxRoot / Exfil.Policies for security list access, vulnerability embargo, and vulnerability disclosure are outlined in the governance policy.
Sandboxed / Escape”).runc instead of runsc).Submissions to the security mailing list that do not meet these requirements may be rejected, ignored, or have the reporters blocked after repeat offenses.