CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-24834

Ghost in the Machine: Breaking Out of Kata Containers via Direct Access Memory Corruption

Alon Barad
Alon Barad
Software Engineer

Feb 19, 2026·7 min read·104 visits

Executive Summary (TL;DR)

Kata Containers < 3.27.0 allows containers to write to the 'read-only' Guest VM filesystem via `/dev/pmem0`. An attacker with `CAP_MKNOD` can overwrite system binaries in memory, executing code as root on the Guest VM.

A critical privilege escalation vulnerability exists in Kata Containers allowing a containerized attacker to overwrite the underlying Guest VM's read-only root filesystem. By exploiting a flaw in how the Linux `virtio-pmem` driver handles read-only flags combined with DAX memory mapping, an attacker can modify executable binaries in the guest kernel's memory space. This grants root access to the micro-VM, bypassing container isolation entirely and, in specific ARM64 configurations, potentially corrupting the host image.

The Illusion of Isolation

Kata Containers is built on a simple, powerful promise: containers are scary, so let's wrap them in lightweight Virtual Machines (microVMs). It's the security equivalent of wearing a hazmat suit inside a tank. You get the speed of containers with the isolation of hardware virtualization. The Guest OS (the kernel running inside the microVM) is supposed to be immutable, a read-only sanctuary that orchestrates the container's lifecycle.

But here's the thing about 'read-only' in the world of virtualization: it's only as good as the enforcement mechanism. CVE-2026-24834 is a beautiful example of what happens when three different components—the Linux kernel, the Hypervisor, and the storage driver—all assume someone else is locking the door.

This isn't a simple buffer overflow. It's a logic flaw in how memory-mapped devices (DAX) talk to the guest kernel. It turns out, if you ask the Linux kernel nicely (or rudely, via mknod), it will let you scribble all over the memory pages that are supposed to be your immutable hard drive. This vulnerability allows a standard container process to reach down through the floorboards and rewrite the operating system running underneath it.

The Three-Headed Monster: Root Cause

To understand this exploit, you have to appreciate the comedy of errors that occurred between the Guest Kernel and the Hypervisor. The vulnerability relies on the interaction between virtio-pmem (Persistent Memory), DAX (Direct Access), and Cloud Hypervisor.

1. The Kernel's Apathy: The Linux virtio-pmem driver has a probe path that is essentially gaslighting us. Even if the underlying device is flagged as Read-Only by the hypervisor, the driver code explicitly clears the nd_region->ro flag. It effectively says, 'I see you want this to be read-only, but I'm going to ignore that.' This results in the block layer exposing /dev/pmem* devices as writable (brw-rw----).

2. The Hypervisor's Copy-on-Write: Cloud Hypervisor, trying to be efficient, maps the backing file into the guest using MAP_PRIVATE. This creates a Copy-on-Write (CoW) mechanism. When the guest writes to this memory, it doesn't error out; instead, it allocates a new private page in RAM and writes there. The hypervisor thinks, 'This is fine, they are only dirtying their own RAM, not the disk.'

3. The DAX Bypass: Here is the kill shot. Kata uses DAX to map the root filesystem directly into the guest's address space for performance. Because it's a direct map, the hypervisor's storage emulation layer is bypassed for reads and writes. When the container writes to the pmem device, it's modifying the actual memory pages that the Guest OS thinks are its executable binaries.

The Code: Fixing the Unfixable

The fix required a strategic retreat. The developers realized that virtio-pmem combined with DAX was simply too permissive for a secure rootfs implementation. The patch, specifically commit 6a672503973bf7c687053e459bfff8a9652e16bf, changes the default storage driver and mounting logic.

Here is the logic shift in the configuration generation:

// Before: blindly trusting pmem and DAX
let use_dax = true;
 
// After: Explicitly disabling DAX for rootfs unless strictly controlled
// and favoring virtio-blk-pci which enforces RO at the block layer
let use_dax = !conf.disable_new_netns && !is_arm64;

The key change involves switching from virtio-pmem to virtio-blk-pci. Unlike pmem, virtio-blk operates via block requests. If the Guest OS tries to write to a read-only virtio-blk device, the hypervisor intercepts the request and returns a hard error (EPERM), rather than silently allocating a CoW page in RAM.

> [!NOTE] > The patch also specifically targets ARM64. On ARM64 QEMU, NVDIMM read-only support was missing entirely. This meant writes didn't just stay in RAM—they could potentially flush back to the host backing file, corrupting the image for every VM on the server.

Exploitation: Inception-Style Root

So, how do we weaponize this? We are inside a container. We want to run code as the Guest VM root. We need CAP_MKNOD (which is often available in less-restrictive container profiles or older Kubernetes setups).

Step 1: Create the Device First, we create the raw block device node for the physical memory. The major number for pmem is usually 259.

mknod /dev/pmem0 b 259 0

Step 2: Locate the Target We can't just write garbage anywhere; we'll crash the kernel. We need to find the physical offset of a binary that the Guest OS executes regularly. systemd-tmpfiles or systemd service binaries are perfect targets. We can calculate this offset by reading the filesystem structure (since we can read /dev/pmem0 just fine).

Step 3: The Overwrite We seek to the calculated offset and write our payload. Since the memory is mapped MAP_PRIVATE by the hypervisor, our write succeeds and is stored in a new physical page allocated to the VM. The Guest OS's page tables are updated to point to this new 'dirty' page.

# Concept Python Exploit
fd = open("/dev/pmem0", "r+b")
fd.seek(TARGET_BINARY_OFFSET)
# Overwrite the binary's entry point with shellcode
fd.write(b"\x7f\x45\x4c\x46...<shellcode>...")
fd.close()

Step 4: Trigger We wait. When the Guest OS tries to run the binary we just overwrote (e.g., via a cron job or timer), it loads our dirty page from RAM instead of the clean page from the disk image. Our shellcode executes with full root privileges inside the microVM context.

The Impact: Why You Should Care

You might ask, "So what? I broke out of the container into a VM. I'm still trapped in a VM." That's true, but you've crossed a major security boundary.

Guest Root Access: You now control the kernel that manages the container. You can bypass all network policies enforced at the guest level, intercept traffic from other containers in the same pod (if using shared networking), and manipulate the container runtime agent.

The ARM64 Catastrophe: If you are running on ARM64 with QEMU, this vulnerability escalates from "Container Breakout" to "Host Persistence". Because QEMU on ARM64 lacks the ability to enforce read-only on NVDIMMs, the writes might bypass the CoW safety net and commit to the actual backing file on the host. This means if you reboot the VM, the malware is still there. If other VMs share the same base image, you just infected them all.

This vulnerability fundamentally breaks the "Hard Multi-tenancy" promise of Kata Containers for affected versions. The barrier between the untrusted workload and the control plane (the Guest OS) is non-existent.

Mitigation: Closing the Hole

Fixing this requires a two-pronged approach: patching the software and hardening the configuration.

1. Upgrade Immediately Update Kata Containers to version 3.27.0 or later. The patch forces the usage of virtio-blk and disables DAX where it is unsafe.

2. Configuration Hardening If you cannot upgrade immediately, you must modify your Kata configuration to avoid virtio-pmem. Ensure your configuration.toml uses virtio-blk for the rootfs_driver.

3. Runtime Restrictions The exploit requires CAP_MKNOD to create the /dev/pmem0 device. Use a strict security context in Kubernetes to drop this capability. Additionally, use Kata's Agent Policy to prevent the container from accessing raw block devices.

securityContext:
  capabilities:
    drop:
      - MKNOD

Without mknod, the attacker cannot instantiate the handle to the memory device, effectively neutralizing the exploit vector even on vulnerable versions.

Official Patches

Kata ContainersKata Containers v3.27.0 Release Notes

Fix Analysis (1)

Technical Appendix

CVSS Score
9.4/ 10
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Affected Systems

Kata ContainersCloud HypervisorQEMU (ARM64 specific impact)

Affected Versions Detail

Product
Affected Versions
Fixed Version
Kata Containers
Kata Containers
< 3.27.03.27.0
AttributeDetail
CWECWE-732
CVSS9.4 (Critical)
Attack VectorLocal (Container to Guest VM)
Privileges RequiredNone (if CAP_MKNOD present)
Exploit StatusPoC Available
PlatformLinux / KVM

MITRE ATT&CK Mapping

T1222File and Directory Permissions Modification
Defense Evasion
T1611Escape to Host
Privilege Escalation
T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-732
Incorrect Permission Assignment for Critical Resource

Incorrect Permission Assignment for Critical Resource

Known Exploits & Detection

GitHub AdvisoryOfficial PoC demonstrating pmem overwrite via python script

Vulnerability Timeline

Initial internal test patches observed
2026-01-16
Vulnerability Disclosed & Patched (v3.27.0)
2026-02-19
CVE-2026-24834 Published
2026-02-19

References & Sources

  • [1]GHSA-wwj6-vghv-5p64 Advisory
  • [2]NVD Entry for CVE-2026-24834

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•1 day ago•CVE-2026-63462
7.5

CVE-2026-63462: Unauthenticated Stack Overflow Denial of Service in Unleash Server

An unauthenticated remote denial of service vulnerability exists in the Unleash feature management platform. By submitting a crafted JSON payload containing deeply nested structures to an OpenAPI-validated endpoint, an attacker can trigger uncontrolled recursion within the error formatting module. This leads to a call-stack exhaustion (RangeError: Maximum call stack size exceeded) inside the Node.js runtime, causing the service to crash immediately without recovery.

Alon Barad
Alon Barad
8 views•6 min read
•1 day ago•CVE-2026-63004
5.5

CVE-2026-63004: Server-Side Request Forgery in Unleash Addon and Integration Subsystem

CVE-2026-63004 is a server-side request forgery (SSRF) vulnerability in the Unleash feature management platform. Authenticated administrators with CREATE_ADDON or UPDATE_ADDON privileges can exploit this vulnerability to initiate requests to loopback addresses, private networks, and cloud metadata endpoints, potentially leading to information disclosure and credential extraction.

Amit Schendel
Amit Schendel
7 views•8 min read
•1 day ago•CVE-2026-63466
4.1

CVE-2026-63466: Process-Wide Security Degradation via Global Module Mutation in Unleash

Prior to version 8.0.3, Unleash's Markdown event formatter directly mutated the global template-escaping function of the shared mustache Node.js module, resulting in a process-wide security degradation where HTML/Markdown escaping was permanently disabled for the application lifetime.

Alon Barad
Alon Barad
3 views•6 min read
•1 day ago•CVE-2026-76904
9.8

CVE-2026-76904: Unauthenticated SQL Injection in GeoTools PostGIS DataStore Component

A critical SQL injection vulnerability exists in the GeoTools open-source Java library. This vulnerability is situated within the post-processing phase of OGC Filter conversion inside the PostGIS DataStore module. Specifically, the `jsonArrayContains` function does not validate or sanitize its arguments before constructing PostgreSQL SQL/JSON path evaluation queries. An unauthenticated remote attacker can exploit this weakness by submitting crafted filters via standard OGC services like WFS or WMS to execute arbitrary SQL commands on the underlying database system.

Alon Barad
Alon Barad
9 views•5 min read
•1 day ago•CVE-2026-61824
8.2

CVE-2026-61824: High-Severity Cross-Site Scripting (XSS) via Unsanitized Site Extractors in Defuddle

CVE-2026-61824 is a high-severity Cross-Site Scripting (XSS) vulnerability in kepano/defuddle before version 0.19.1. Custom site extractors for platforms such as X/Twitter, Substack, and YouTube constructed HTML representations via template string interpolation without output escaping. This allowed malicious pages to bypass standard parser sanitization routines and execute arbitrary JavaScript.

Amit Schendel
Amit Schendel
5 views•7 min read
•1 day ago•CVE-2026-63421
7.5

CVE-2026-63421: Query Limit Bypass via Negative Integer Input in KeystoneJS core resolvers

A high-severity vulnerability exists in KeystoneJS, a popular Node.js CMS and GraphQL framework, where the query resolution engine fails to validate signed negative integers within the pagination subsystem. Unauthenticated remote attackers can leverage this flaw to bypass the 'graphql.maxTake' safety boundary. By sending large negative values in the 'take' query parameter, the underlying Prisma ORM interprets the value as an instruction to fetch rows from the end of the collection, allowing malicious actors to bypass pagination limits, trigger database resource exhaustion, and execute application-level Denial of Service (DoS) attacks.

Alon Barad
Alon Barad
6 views•6 min read