← Back to Feed CACHED · 2026-08-05 16:23:06 · CACHE_KEY CVE-2026-64531
CVE-2026-64531 · CWE-190 · Disclosed 2026-07-27

In the Linux kernel

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

A 16-bit length field wraps around and the kernel starts executing attacker-written instructions like a puppet reading a forged script

CVE-2026-64531, dubbed OVSwrap, is an integer-wraparound bug in the Linux kernel's Open vSwitch (OVS) datapath module. When validating nested flow actions (CT or CLONE wrappers), the kernel stores the generated action stream length in a u16 (nla_len). A prior commit removed the guard that prevented a single nested attribute from exceeding 65,535 bytes. By packing hundreds of small conntrack actions inside a CLONE wrapper, an attacker pushes the generated stream past U16_MAX, causing the length field to wrap to a small value. On subsequent dump or teardown, the parser resumes inside attacker-controlled data and treats forged action headers as legitimate kernel operations — giving full credential overwrite and root. Affected kernels span virtually every maintained stable tree: everything before 5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18.40, and 7.1.5. This covers the entire EL9/EL10 family, multiple Debian stable releases, and Ubuntu 22.04–26.04 before their respective kernel updates.

The vendor's HIGH / 7.8 rating is accurate and defensible. The CVSS vector (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) correctly captures that this is a local, low-complexity, low-privilege escalation to full root. One might argue for *upgrading* it given the public weaponized PoC and the fact that many distros auto-load openvswitch on demand, but the local-access prerequisite is a genuine limiting factor for initial access. The score stands.

"Public local-root exploit on hypervisor and Kubernetes nodes where OVS is loaded by design"
02 · The Attack Path

6 steps from start to impact.

STEP 01

Obtain unprivileged shell on target host

The attacker needs any local user session — SSH, container escape, compromised web app with shell, or a shared hosting account. No special OVS or networking privileges are required at this stage. The attack is entirely local; there is no remote vector.
Conditions required:
  • Local shell access as any unprivileged user
Where this breaks in practice:
  • Requires prior initial access — phishing, stolen creds, or another exploit chain
  • Hardened jump-hosts and bastion patterns reduce lateral movement to target nodes
Detection/coverage: EDR telemetry for anomalous shell sessions; SSH audit logs
STEP 02

Create user + network namespace via unshare

The attacker runs unshare -Urn to create a private user namespace where they automatically gain CAP_NET_ADMIN. This is the standard unprivileged-user-namespace trick used in many recent kernel LPE chains. On Ubuntu (all supported releases) and RHEL/EL9+, unprivileged user namespaces are enabled by default.
Conditions required:
  • Unprivileged user namespaces enabled (sysctl kernel.unprivileged_userns_clone=1 or namespace support compiled in)
Where this breaks in practice:
  • Some hardened environments (CIS Level 2, grsecurity, Ubuntu 24.04+ AppArmor userns restrictions) disable or restrict unprivileged userns
  • Container runtimes with seccomp profiles may block unshare syscall
Detection/coverage: Auditd rules for unshare syscall; Falco rules for namespace creation by non-root
STEP 03

Auto-load openvswitch kernel module

From inside the namespace, the attacker opens a Netlink Generic socket for the OVS family. If the openvswitch module is not already loaded, the kernel's module auto-loader (request_module) loads it on demand. No root or CAP_SYS_MODULE is needed — the Netlink family registration triggers the load. On hosts already running OVS (hypervisors, Kubernetes nodes with OVN), the module is pre-loaded.
Conditions required:
  • openvswitch module available in /lib/modules (present in default distro kernels)
  • Module auto-loading not blocked via modprobe blacklist
Where this breaks in practice:
  • Hosts with install openvswitch /bin/false in modprobe.d are immune
  • Minimal/container-optimized kernels (Bottlerocket, Flatcar, Talos) may not ship the module
Detection/coverage: Auditd init_module / finit_module events; kernel log for module load
STEP 04

Install oversized nested flow actions

The attacker crafts a Netlink OVS_FLOW_CMD_NEW message containing a CLONE action wrapper packed with hundreds of small CT sub-actions. The total generated action stream exceeds 65,535 bytes, causing the 16-bit nla_len field to wrap. The kernel validates the actions during installation but the truncated length means later parsing sees a structurally different stream. The public PoC by Asim Manizada automates this step entirely.
Conditions required:
  • CAP_NET_ADMIN inside the user namespace (granted automatically by step 2)
Where this breaks in practice:
  • None significant — the PoC is reliable and self-contained
Detection/coverage: Deep OVS Netlink monitoring is uncommon; most EDR does not inspect Netlink payloads
STEP 05

Trigger action dump/teardown to corrupt credentials

The attacker triggers a flow dump or deletion, causing the kernel to walk the action stream using the wrapped length. The parser resumes inside attacker-controlled bytes, interpreting forged action headers that overwrite the calling process's struct cred in kernel memory. The attacker's process is elevated to UID 0 with full capabilities. The PoC reportedly achieves this reliably across ~800 kernel builds.
Conditions required:
  • Steps 1–4 completed
Where this breaks in practice:
  • KASLR, SMEP, SMAP provide defense-in-depth but the PoC includes bypasses for standard configurations
Detection/coverage: EDR detection of credential structure modification; sudden UID change from non-root to root for a process
STEP 06

Full root access — pivot or persist

With root on the host, the attacker can read secrets, install persistence, pivot to other hosts, or — on hypervisors/Kubernetes nodes — access VM disks, container filesystems, and control-plane credentials. On an OVN-Kubernetes node, root means access to all pod network secrets and potentially the cluster etcd if the node holds control-plane components.
Conditions required:
  • Root shell obtained
Where this breaks in practice:
  • Post-exploitation activity may be detected by EDR, HIDS, or immutable infrastructure rebuild cycles
Detection/coverage: File integrity monitoring; EDR behavioral detection for post-exploitation tooling
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNo confirmed in-the-wild exploitation as of 2026-08-06. Not listed on CISA KEV. However, the public PoC lowers the bar significantly — expect weaponization in commodity rootkit toolkits within weeks.
Proof-of-ConceptPublic and weaponized. Researcher Asim Manizada published a full write-up and working PoC on 2026-07-28 via oss-security. The exploit is reported reliable across ~800 kernel builds. Also indexed on Sploitus.
EPSS0.00129 (low, ~top 15%). EPSS historically underweights kernel LPEs with local vectors; do not rely on this score alone.
KEV StatusNot listed as of 2026-08-06.
CVSS VectorCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H — Local access, low complexity, low privilege, no user interaction. Scope is Unchanged, meaning impact stays within the kernel security boundary (though practically, root *is* the security boundary).
Affected VersionsAll mainstream stable kernels before: 5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18.40, 7.1.5. Covers RHEL/EL 9.x and 10.x, Debian bookworm/trixie, Ubuntu 22.04–26.04.
Fixed VersionsUpstream commit 3f1f75536668. Stable releases: 5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18.40, 7.1.5. Distro backport status varies — check your distro's errata.
Scanning / ExposureNot remotely exploitable, so Shodan/GreyNoise/Censys are not applicable. Exposure is measured by kernel version inventory. Qualys and Tenable have detection plugins. Any Linux host running an affected kernel with the openvswitch module available is potentially vulnerable.
Disclosure Date2026-07-27 (CVE reserved); full PoC published 2026-07-28.
ResearcherAsim Manizada — independent researcher. Coordinated disclosure via oss-security mailing list.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to HIGH (7.8/10)

The single most decisive factor sustaining the HIGH rating is the public weaponized PoC that achieves reliable local root on default kernel configurations, combined with OVS's canonical deployment on hypervisors and Kubernetes nodes where root means fleet-scale blast radius. The local-access prerequisite prevents an upgrade to CRITICAL, but the floor is firmly HIGH due to the high-value-role deployment pattern.

HIGH Vulnerability technical details and exploit reliability
HIGH Affected version ranges and fix availability
MEDIUM In-the-wild exploitation status (absence of evidence ≠ evidence of absence, given 9-day-old public PoC)

Why this verdict

  • Public weaponized exploit with broad kernel coverage. The PoC is reliable across ~800 kernel builds, self-contained, and requires no pre-existing OVS configuration. This eliminates the usual kernel-exploit friction of version-specific offsets and unreliable heap manipulation.
  • Low friction attack chain. The four prerequisites — local shell, unprivileged userns (default on Ubuntu/RHEL 9+), openvswitch module available (default in distro kernels), and CAP_NET_ADMIN in namespace (automatic) — are all met on default installations. The only hard prerequisite is initial local access.
  • Role multiplier: OVS is canonically deployed on (a) KVM/OpenStack compute hypervisors where root = access to all guest VM disk images and memory, blast radius = fleet-scale; (b) Kubernetes nodes running OVN-Kubernetes or Antrea where root = access to all pod secrets and potentially cluster control-plane credentials, blast radius = cluster-scale; (c) SDN network infrastructure where root = network control plane compromise. These high-value roles represent a *majority* of intentional OVS deployments (>50% of OVS installs are on hypervisors or k8s nodes by design), establishing a HIGH floor. On workstations or generic servers where OVS is not intentionally deployed, the module is still often available for auto-loading, making them opportunistically vulnerable.
  • Local-access prerequisite is genuine friction but not a floor-breaker. The AV:L vector means this is a post-initial-access escalation tool, not a first-stage exploit. However, any compromised container, web app, or stolen SSH key on a hypervisor or k8s node becomes an instant root chain — this is the exact escalation step attackers need after container escape or lateral movement.

Why not higher?

CRITICAL would require either remote exploitability, active in-the-wild exploitation, or a scenario where the bug is directly reachable without prior compromise. OVSwrap requires a local shell first — an attacker cannot exploit this from the internet. The Scope is Unchanged in the CVSS vector, and while practical root access is devastating, the pre-authentication barrier of local access is a real constraint that separates this from CRITICAL-tier vulnerabilities like Zerologon or MOVEit.

Why not lower?

A downgrade to MEDIUM is blocked by the high-value-role floor. OVS is *the* networking datapath for KVM hypervisors and major Kubernetes CNI implementations — root on these hosts is fleet-scale compromise. The public PoC is reliable, self-contained, and works on default configurations. The module auto-loads on most distros, so even hosts not intentionally running OVS are exposed. Any multi-tenant Linux environment with shell access (shared hosting, CI runners, container platforms) is at elevated risk.

05 · Compensating Control

What to do — in priority order.

  1. Blacklist the openvswitch kernel module immediately — Run echo 'install openvswitch /bin/false' > /etc/modprobe.d/ovswrap-cve-2026-64531.conf on all hosts not actively using OVS. This prevents auto-loading and completely blocks the exploit with no reboot required. Deploy within the noisgate mitigation SLA of 30 days; for hypervisors and k8s nodes running OVS, prioritize the kernel patch instead.
  2. Restrict unprivileged user namespaces — Set sysctl kernel.unprivileged_userns_clone=0 (Debian/Ubuntu) or apply AppArmor userns restrictions (Ubuntu 24.04+). This breaks the unshare-based namespace trick that gives unprivileged users CAP_NET_ADMIN. Note: this may break some containerized workloads — test in staging first. Deploy within 30 days per noisgate mitigation SLA.
  3. Prioritize kernel patching on OVS-active hosts — Hypervisors, Kubernetes nodes, and SDN infrastructure running OVS cannot use the module blacklist without breaking production networking. These hosts MUST be patched to a fixed kernel version. Schedule maintenance windows for these high-value hosts first, within the noisgate remediation SLA of 180 days, but aim for 30 days given the public PoC.
  4. Deploy auditd rules for unshare and module loading — Add auditd rules: -a always,exit -F arch=b64 -S unshare -F key=userns and -a always,exit -F arch=b64 -S finit_module -F key=modload. This provides detection coverage while patches roll out. Deploy alongside mitigation controls.
What doesn't work
  • Network firewalls and WAFs — this is a local exploit with no network component. Perimeter controls are irrelevant to the attack path.
  • SELinux in targeted mode — the default RHEL targeted policy does not restrict Netlink Generic socket operations or module auto-loading for confined users. SELinux will not block the exploit chain on default configurations.
  • Container isolation alone — if the container runtime allows unprivileged user namespaces and the host kernel is vulnerable, a container escape + OVSwrap chain is viable. The container boundary does not protect the host kernel.
06 · Verification

Crowdsourced verification payload.

Run this script on each target Linux host as any user (no root needed). Invoke with: bash check_ovswrap.sh. It checks the running kernel version against known-fixed stable releases and whether the openvswitch module is loadable.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# check_ovswrap.sh — CVE-2026-64531 (OVSwrap) vulnerability checker
# Run on target Linux host. No root required.
# Exit codes: 1=VULNERABLE, 0=PATCHED, 2=UNKNOWN

set -euo pipefail

KERNEL=$(uname -r)
echo "[*] Running kernel: $KERNEL"

# Extract major.minor.patch from kernel version string
MAJOR=$(echo "$KERNEL" | cut -d. -f1)
MINOR=$(echo "$KERNEL" | cut -d. -f2)
PATCH=$(echo "$KERNEL" | cut -d. -f3 | grep -oE '^[0-9]+')

if [ -z "$MAJOR" ] || [ -z "$MINOR" ] || [ -z "$PATCH" ]; then
  echo "[?] UNKNOWN — could not parse kernel version"
  exit 2
fi

# Check if openvswitch module is available
OVS_AVAIL="no"
if lsmod 2>/dev/null | grep -q openvswitch; then
  OVS_AVAIL="loaded"
elif modprobe --dry-run openvswitch 2>/dev/null; then
  OVS_AVAIL="available"
elif find /lib/modules/"$KERNEL" -name 'openvswitch.ko*' 2>/dev/null | grep -q .; then
  OVS_AVAIL="available"
fi
echo "[*] openvswitch module status: $OVS_AVAIL"

if [ "$OVS_AVAIL" = "no" ]; then
  echo "[+] PATCHED (not vulnerable) — openvswitch module not available on this kernel"
  exit 0
fi

# Check module blacklist
if grep -rqs 'install openvswitch /bin/false\|blacklist openvswitch' /etc/modprobe.d/ 2>/dev/null; then
  echo "[+] PATCHED (mitigated) — openvswitch module is blacklisted via modprobe.d"
  exit 0
fi

# Version comparison: fixed versions by stable branch
# 5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18.40, 7.1.5
VULN=0
case "${MAJOR}.${MINOR}" in
  5.15) [ "$PATCH" -lt 212 ] && VULN=1 ;;
  6.1)  [ "$PATCH" -lt 178 ] && VULN=1 ;;
  6.6)  [ "$PATCH" -lt 145 ] && VULN=1 ;;
  6.12) [ "$PATCH" -lt 97 ]  && VULN=1 ;;
  6.18) [ "$PATCH" -lt 40 ]  && VULN=1 ;;
  7.1)  [ "$PATCH" -lt 5 ]   && VULN=1 ;;
  7.*)  VULN=0 ;;  # 7.2+ assumed fixed
  *)
    # Kernels on branches not in the fixed list (e.g. 6.2-6.5, 6.7-6.11, 6.13-6.17)
    # are EOL upstream; assume vulnerable if OVS module is present
    if [ "$MAJOR" -ge 5 ]; then
      echo "[!] Kernel ${MAJOR}.${MINOR} is not a current stable branch — likely vulnerable if unpatched by distro"
      VULN=1
    fi
    ;;
esac

if [ "$VULN" -eq 1 ]; then
  echo "[-] VULNERABLE — kernel $KERNEL is below the fix for CVE-2026-64531 and openvswitch module is $OVS_AVAIL"
  exit 1
else
  echo "[+] PATCHED — kernel $KERNEL is at or above the fixed version for CVE-2026-64531"
  exit 0
fi
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: First, push the module blacklist (install openvswitch /bin/false) to every host that does not actively run OVS — this is a zero-downtime, no-reboot mitigation you can deploy via config management today. For your hypervisors and Kubernetes nodes that *need* OVS, schedule kernel patching as your top priority this sprint; the public PoC makes this a favorite post-compromise escalation tool for any attacker who lands a shell on your compute fleet. Per the noisgate mitigation SLA for HIGH, deploy compensating controls (module blacklist or userns restriction) within 30 days. Per the noisgate remediation SLA, complete kernel patching fleet-wide within 180 days, but push OVS-active high-value hosts to the front of the queue — aim for 30 days on those. There is no KEV listing or confirmed in-the-wild exploitation yet, so this is not an emergency all-hands patch, but the reliable public exploit means the clock is ticking.

Sources

  1. oss-security disclosure by Asim Manizada
  2. The Hacker News — OVSwrap coverage
  3. CloudLinux mitigation guide
  4. SecurityOnline — PoC disclosure details
  5. Tenable CVE entry
  6. CyberPress — technical analysis
  7. University of Wisconsin security announcement
  8. Red Hat CVE page
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.