Skip to main content

Boteraser | Website and Server Security Solutions

🛡️ CVE-2026-44210 — kata-containers

🔴 CVSS 9.9 — Critical ✅ No Known Exploit CWE-88 NVD
9.9
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

Kata Containers have VM Escape via virtiofsd Argument Injection through Default-Enabled Pod Annotations

Summary

Kata Containers ships with a default configuration that allows pod creators to inject arbitrary command-line arguments into the virtiofsd process through the io.katacontainers.config.hypervisor.virtio_fs_extra_args pod annotation. By injecting -o source=/ along with --no-announce-submounts and --sandbox=none, an attacker can override the virtiofsd shared directory to serve the entire host root filesystem into the guest VM. Combined with the kernel_params annotation (also enabled by default) to activate the agent debug console, the attacker can mount the host filesystem from inside the VM and read or write any file on the host, including /etc/shadow.

Details

The default Kata configuration at configuration.toml line 1 contains:

```

enable_annotations = ["enable_iommu", "virtio_fs_extra_args", "kernel_params", "kernel_verity_params"]

```

Both virtio_fs_extra_args and kernel_params are enabled out of the box. The annotation name is checked against this allowlist, but the annotation value (the actual arguments) is never validated or filtered.

In utils.go at line 981, the runtime parses the annotation value as a JSON string array and appends it directly to the virtiofsd arguments:

```go

if value, ok := ocispec.Annotations[vcAnnotations.VirtioFSExtraArgs]; ok {

var parsedValue []string

err := json.Unmarshal([]byte(value), &parsedValue)

// ...

sbConfig.HypervisorConfig.VirtioFSExtraArgs = append(

sbConfig.HypervisorConfig.VirtioFSExtraArgs, parsedValue...)

}

```

In virtiofsd.go at line 183-198, the runtime builds the virtiofsd command line with --shared-dir=<kata_managed_path> first, then appends the extra args:

```go

args := []string{

"--syslog",

"--cache=" + v.cache,

"--shared-dir=" + v.sourcePath,

fmt.Sprintf("--fd=%v", FdSocketNumber),

}

if len(v.extraArgs) != 0 {

args = append(args, v.extraArgs...)

}

```

The virtiofsd binary (Rust, from gitlab.com/virtio-fs/virtiofsd) supports a compatibility option -o source=PATH that overrides the --shared-dir value. This is processed after clap argument parsing, in the parse_compat() function at main.rs:462:

```rust

["source", value] => opt.shared_dir = Some(value.to_string()),

```

Because -o source=/ is appended after --shared-dir=<kata_path>, it overrides the shared directory to /. The virtiofsd process then serves the entire host root filesystem through the virtio-fs device.

Additionally, virtiofsd's --announce-submounts flag (set by default) causes the guest kernel to create FUSE automounts for bind mounts within the shared directory. When the shared directory is /, this produces automounts that shadow the root directory listing. Injecting --no-announce-submounts disables this behavior and exposes the true host root directory contents through the kataShared virtiofs mount.

The kernel_params annotation is used to inject agent.debug_console agent.debug_console_vport=1026 into the VM kernel command line. This enables a root shell inside the VM through the kata-runtime exec command. From this shell, the attacker mounts the kataShared virtiofs filesystem and accesses host files directly.

Rootfs bridge (PoC artifact, not a real constraint)

When virtiofsd uses -o source=/ to serve the host root, the Kata agent looks for the container rootfs at /<container-id>/rootfs relative to the virtiofs root. The PoC pre-creates this directory on the host to keep the demonstration self-contained with ctr.

In a real Kubernetes attack, there are several ways to satisfy this without hostPath volumes. An initContainer that runs before the target container can create the directory. Alternatively, the attacker can set up a second pod that writes to a shared persistent volume mounted on the host. The rootfs bridge is a PoC convenience, not a limitation of the vulnerability itself.

Impact

An attacker who can create pods on a Kubernetes cluster using Kata Containers with default configuration can:

  • Read any file on the host, including /etc/shadow, SSH private keys, and service credentials
  • Write to any file on the host, enabling persistent backdoors, cron jobs, or binary replacement
  • Access other containers' data through the host filesystem
  • Compromise the Kubernetes control plane if it runs on the same host

Steps to reproduce

Tested on a bare metal server (AMD Ryzen 5 3600, Ubuntu 24.04, kernel 6.8.0-100-generic) with Kata Containers 3.28.0 installed from the official release tarball.

1. Install Kata Containers 3.28.0 and configure containerd. Verify that the default configuration has virtio_fs_extra_args in enable_annotations.

2. Pull a container image:

```

ctr image pull docker.io/library/alpine:latest

```

3. Run the PoC script below, or follow the manual steps:

Manual steps:

a. Extract a container rootfs and create the rootfs bridge (replace $SB_ID with

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs low-level privileges on the target. No user interaction is required. The scope is changed, meaning a successful attack can affect components beyond the vulnerable one. Rated impact: confidentiality high, integrity high, availability high.

CVSS metrics in full

The score comes from this vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H

  • Attack vector: Network — reachable from anywhere that can route to the service.
  • Attack complexity: Low — the attack works reliably, with no preparation.
  • Privileges required: Low — an ordinary user account is enough.
  • User interaction: None — nobody has to be tricked into anything.
  • Scope: Changed — a successful attack reaches components beyond the vulnerable one.
  • Confidentiality impact: High — total loss, or loss the attacker controls.
  • Integrity impact: High — total loss, or loss the attacker controls.
  • Availability impact: High — total loss, or loss the attacker controls.

Weakness class

CVE-2026-44210 is classified as CWE-88: Argument Injection. Input is passed into a command line without separating data from options, letting an attacker introduce extra arguments.

Affected software

CVE-2026-44210 is recorded against 2 packages.

  • github.com/kata-containers/kata-containers
  • kata-containers (fixed in 3.31.0)

Timeline and source

Published on 25 June 2026 and last revised on 28 July 2026. No public exploit is currently recorded for this entry. A vendor advisory or fix has been published. Record sourced from NVD.

References

github.com (Advisory)
github.com (Fix)

Other advisories for this package

github.com/kata-containers/kata-containers has other advisories on record. If you are patching this one, these are worth checking on the same host:

Same weakness in other software

These advisories are the same class of weakness (CWE-88: Argument Injection) in other software:

Details

Severity Critical
CVSS Score 9.9
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
CWE CWE-88
Public Exploit ✅ No
Source NVD
Published 2026-06-25
Updated 2026-08-20
Modified 2026-07-28

Affected Packages

Software From version Fixed in
github.com/kata-containers/kata-containers
kata-containers 3.31.0

Similar Threats

Exploit Protection

Are you running kata-containers?

CVE-2026-44210 carries CVSS 9.9 Critical rating. BotEraser checks your installation against this and other known CVE records, and blocks IPs associated with exploit activity.

Check My Site For CVE-2026-44210 →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.

Browse related advisories

All advisoriesCVECVE 2026