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.
6 steps from start to impact.
Obtain unprivileged shell on target host
- Local shell access as any unprivileged user
- Requires prior initial access — phishing, stolen creds, or another exploit chain
- Hardened jump-hosts and bastion patterns reduce lateral movement to target nodes
Create user + network namespace via unshare
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.- Unprivileged user namespaces enabled (sysctl
kernel.unprivileged_userns_clone=1or namespace support compiled in)
- Some hardened environments (CIS Level 2, grsecurity, Ubuntu 24.04+ AppArmor userns restrictions) disable or restrict unprivileged userns
- Container runtimes with
seccompprofiles may blockunsharesyscall
unshare syscall; Falco rules for namespace creation by non-rootAuto-load openvswitch kernel module
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.- openvswitch module available in
/lib/modules(present in default distro kernels) - Module auto-loading not blocked via modprobe blacklist
- Hosts with
install openvswitch /bin/falsein modprobe.d are immune - Minimal/container-optimized kernels (Bottlerocket, Flatcar, Talos) may not ship the module
init_module / finit_module events; kernel log for module loadInstall oversized nested flow actions
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.- CAP_NET_ADMIN inside the user namespace (granted automatically by step 2)
- None significant — the PoC is reliable and self-contained
Trigger action dump/teardown to corrupt credentials
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.- Steps 1–4 completed
- KASLR, SMEP, SMAP provide defense-in-depth but the PoC includes bypasses for standard configurations
Full root access — pivot or persist
- Root shell obtained
- Post-exploitation activity may be detected by EDR, HIDS, or immutable infrastructure rebuild cycles
The supporting signals.
| In-the-Wild Exploitation | No 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-Concept | Public 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. |
| EPSS | 0.00129 (low, ~top 15%). EPSS historically underweights kernel LPEs with local vectors; do not rely on this score alone. |
| KEV Status | Not listed as of 2026-08-06. |
| CVSS Vector | CVSS: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 Versions | All 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 Versions | Upstream 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 / Exposure | Not 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 Date | 2026-07-27 (CVE reserved); full PoC published 2026-07-28. |
| Researcher | Asim Manizada — independent researcher. Coordinated disclosure via oss-security mailing list. |
noisgate verdict.
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.
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.
What to do — in priority order.
- Blacklist the openvswitch kernel module immediately — Run
echo 'install openvswitch /bin/false' > /etc/modprobe.d/ovswrap-cve-2026-64531.confon 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. - 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. - 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.
- Deploy auditd rules for unshare and module loading — Add auditd rules:
-a always,exit -F arch=b64 -S unshare -F key=usernsand-a always,exit -F arch=b64 -S finit_module -F key=modload. This provides detection coverage while patches roll out. Deploy alongside mitigation controls.
- 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.
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.
#!/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
fiIf you remember one thing.
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
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.