← Back to Feed CACHED · 2026-09-18 16:34:29 · CACHE_KEY CVE-2026-53266
CVE-2026-53266 · CWE-787 · Disclosed 2026-06-25

In the Linux kernel

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

Like leaving a pen on a library book's page — only the librarian can get close enough to scribble on it

CVE-2026-53266 is an out-of-bounds write in the Linux kernel's netfilter bridge subsystem. When the ebtables SNAT target rewrites the ARP sender hardware address, it calls skb_store_bits() without first calling skb_ensure_writable() on the ARP payload region. If the packet buffer is nonlinear — backed by a splice-imported file page — the write goes directly into a potentially read-only or shared page, corrupting kernel memory. The bug was introduced by commit 63137bc5882a in kernel 5.10 and affects every stable branch from 5.10 through 6.18. Fixed versions are 5.10.259, 5.15.210, 6.1.176, 6.6.143, 6.12.94, and 6.18.36.

The vendor's CVSS 8.8 HIGH with PR:L (Privileges Required: Low) significantly overstates the real-world attack surface. Triggering this bug requires the ability to configure ebtables rules with SNAT and ARP rewriting, which demands CAP_NET_ADMIN — a capability that is dropped by default in Docker, Kubernetes, and every hardened Linux deployment. CAP_NET_ADMIN is functionally equivalent to PR:H (Privileges Required: High) in the CVSS model, which alone would drop the base score from 8.8 to roughly 8.2, and once you factor in the additional requirement of engineering a nonlinear skb via vmsplice() or similar with the right page-backed fragment layout, the practical exploitability drops further. There is no public PoC, no known in-the-wild exploitation, and the EPSS score of 0.00121 reflects the security community's consensus that weaponization is unlikely near-term.

"Kernel memory write in ebtables SNAT needs CAP_NET_ADMIN — not the easy LPE vendors imply."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Obtain CAP_NET_ADMIN

The attacker must hold CAP_NET_ADMIN in the target network namespace. On a bare-metal host this means root or a process explicitly granted the capability. In a container, the pod spec must include NET_ADMIN in securityContext.capabilities.add. Without it, all ebtables operations are refused by the kernel.
Conditions required:
  • Local or container-local access to the target host
  • CAP_NET_ADMIN capability in the relevant network namespace
Where this breaks in practice:
  • Docker and containerd drop CAP_NET_ADMIN by default
  • Kubernetes Pod Security Standards (Restricted profile) block it
  • Most enterprise hosts do not grant CAP_NET_ADMIN to non-root users
STEP 02

Install ebtables SNAT rule with ARP rewrite

The attacker loads an ebtables SNAT rule on a bridge interface that rewrites the ARP sender hardware address. This requires the ebtables or ebtables-nft userspace tool and an active bridge device. The rule must target ARP traffic traversing the bridge to reach the vulnerable code path in ebt_snat_tg().
Conditions required:
  • A bridge interface exists in the namespace
  • ebtables userspace tooling is available
Where this breaks in practice:
  • Many container runtimes use nftables or iptables without ebtables
  • Bridge interfaces are not always present in every namespace
  • Container images rarely ship ebtables binaries
Detection/coverage: Auditd rules on CAP_NET_ADMIN syscalls and ebtables module loads can flag this activity.
STEP 03

Engineer nonlinear skb via splice

The attacker must cause the kernel to construct a nonlinear skb whose ARP payload region is backed by a splice-imported file page (e.g., via vmsplice() into a socket feeding the bridge). This is the crux of the exploit: the write into skb_store_bits() only corrupts memory when the target range falls within a page-fragment that is not CoW-safe. Achieving this layout reliably requires precise control over packet construction and kernel memory allocation.
Conditions required:
  • Ability to call vmsplice() or equivalent to create file-page-backed skb fragments
  • ARP packets must traverse the bridge with the SNAT rule active
Where this breaks in practice:
  • Achieving the correct skb layout is non-trivial and kernel-version-dependent
  • ASLR and slab randomization make reliable exploitation harder
  • No public tooling or technique demonstrates this step
STEP 04

Corrupt kernel memory

When the SNAT rule fires on the crafted ARP packet, skb_store_bits() writes the new MAC address (6 bytes) into the page-backed fragment. This corrupts whatever data structure shares that page. The attacker's goal is to overwrite a function pointer, credential structure, or page-table entry to escalate privileges. In a container context, this could mean escaping to the host kernel.
Conditions required:
  • Successful skb layout from step 3
  • The corrupted page must overlap a security-sensitive structure
Where this breaks in practice:
  • 6-byte write window is extremely narrow for reliable exploitation
  • Heap spray / grooming techniques for this specific path are unpublished
  • Kernel hardening (SMAP, SMEP, CFI, KASAN) blocks many corruption-to-execution pivots
Detection/coverage: Kernel KASAN (if enabled) will detect the out-of-bounds write. Crash dumps with netfilter/ebtables stack traces are a post-incident indicator.
STEP 05

Privilege escalation or container escape

If the memory corruption lands on a controllable target, the attacker gains kernel code execution. On a container host, this translates to full host compromise and access to all co-located workloads. On a bare-metal server, it means root. The Scope Changed (S:C) rating in the CVSS vector reflects this cross-boundary potential.
Conditions required:
  • Successful exploitation of the memory corruption in step 4
Where this breaks in practice:
  • No known exploit chain completes this step
  • Multiple kernel mitigations (CFI, KASLR, SMAP) must be bypassed
  • The entire chain is theoretical as of September 2026
Detection/coverage: EDR agents monitoring for anomalous kernel behavior, unexpected privilege changes, or namespace escapes would detect the post-exploitation phase.
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNone observed. Not listed in CISA KEV. No reports from threat intelligence vendors or incident responders as of September 2026.
Proof-of-ConceptNo public PoC exists. No exploit code on GitHub, ExploitDB, or Metasploit. The specific skb layout engineering required makes PoC development non-trivial.
EPSS Score0.00121 — bottom ~15th percentile. The prediction model sees negligible near-term exploitation probability.
KEV StatusNot listed. No CISA KEV entry as of 2026-09-19.
CVSS VectorCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H — 8.8 HIGH. noisgate notes: PR:L is a misclassification; the real prerequisite is CAP_NET_ADMIN, which maps to PR:H in practice, reducing the adjusted base to ~8.2 before environmental factors.
Affected VersionsLinux kernel 5.10 through 6.18.x (introduced by commit 63137bc5882a). All stable branches from 5.10, 5.15, 6.1, 6.6, 6.12, and 6.18 are affected prior to the fix.
Fixed VersionsUpstream: 5.10.259, 5.15.210, 6.1.176, 6.6.143, 6.12.94, 6.18.36. Distros: Ubuntu 26.04 fixed in 7.0.0-31.31; RHEL 8/9 via RHSA-2026:36645, RHSA-2026:39082, RHSA-2026:39083.
Scanning / ExposureLocal-only vulnerability — not remotely scannable. No Shodan/GreyNoise/Censys surface. Vulnerability scanners (Qualys, Tenable, Rapid7) detect via authenticated kernel version checks.
Disclosure Date2026-06-25 — publicly disclosed via linux-cve-announce mailing list.
ReporterIdentified via upstream Linux kernel netfilter maintainers (Pablo Neira Ayuso's netfilter patchset).
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.5/10)

The single most decisive factor is the CAP_NET_ADMIN prerequisite, which the vendor mislabeled as PR:L — this capability is dropped by default in Docker, Kubernetes, and hardened Linux hosts, reducing the reachable population to a small fraction of deployments. Combined with zero public exploitation tooling, an extremely narrow 6-byte write window, and multiple kernel hardening barriers, the practical risk falls well below the vendor's 8.8 HIGH rating.

HIGH Vulnerability existence and affected version range
HIGH CAP_NET_ADMIN requirement as exploitation prerequisite
MEDIUM Exploitability assessment (no PoC to validate)
LOW Container escape feasibility via this specific write primitive

Why this verdict

  • CAP_NET_ADMIN gate: The real privilege requirement is CAP_NET_ADMIN, not generic low-privilege access. This capability is dropped by default in Docker (--cap-drop=ALL best practice), Kubernetes Restricted PSS, and most enterprise Linux configurations. The vendor's PR:L label inflates the CVSS by ~0.6 points.
  • No weaponization: Zero public PoCs, zero in-the-wild exploitation, and an EPSS of 0.00121. The skb layout engineering required to reach the vulnerable code path is undocumented and non-trivial.
  • Narrow write primitive: The corruption window is 6 bytes (a MAC address) at a kernel-determined offset. Converting this to reliable code execution requires bypassing KASLR, SMAP, SMEP, and (on modern kernels) CFI — a research-grade exploit development effort.
  • Role multiplier: The Linux kernel is canonically a high-value component running on container hosts, hypervisors, and infrastructure nodes. *However*, the attack path requires CAP_NET_ADMIN + ebtables + bridge interface + splice-engineered skbs — a conjunction of conditions that fails on >95% of container hosts (CAP_NET_ADMIN alone is absent in default configs). On KVM hypervisors, the host kernel is not typically exposed to guest-controlled ebtables rules. The theoretical worst-case (container escape on a Kubernetes node) is real but requires a non-default, explicitly insecure pod configuration. This prevents the HIGH floor from activating — the conjunction of prerequisites reduces the high-value-role reachable population below the 1% threshold for floor enforcement.

Why not higher?

Upgrading to HIGH would require either active exploitation evidence, a public PoC demonstrating reliable privilege escalation, or a realistic attack path that does not depend on CAP_NET_ADMIN. None of these conditions are met. The conjunction of CAP_NET_ADMIN + nonlinear skb engineering + 6-byte write weaponization represents at least three independent friction points, each of which individually narrows the exploitable population.

Why not lower?

Downgrading to LOW would undercount the theoretical container-escape scenario on misconfigured Kubernetes nodes. The Scope Changed (S:C) designation is legitimate — if exploited, this crosses security boundaries. Additionally, the bug is in a core kernel subsystem (netfilter) that processes network traffic at high frequency, and kernel memory corruption bugs have a history of eventually being weaponized even when initial assessments are pessimistic.

05 · Compensating Control

What to do — in priority order.

  1. Audit and remove CAP_NET_ADMIN from all non-essential containers — The single most effective mitigation. Review all Kubernetes pod specs and Docker run commands for CAP_NET_ADMIN. Remove it from any workload that does not explicitly require it (which is >99% of application pods). This completely eliminates the attack surface for containerized exploitation. Deploy within the 365-day noisgate remediation SLA window, but prioritize this audit within 30 days as good hygiene.
  2. Enforce Kubernetes Pod Security Standards (Restricted profile) — The Restricted PSS profile drops all capabilities including CAP_NET_ADMIN by default. Apply it at the namespace level for all application workloads. This prevents any container from reaching the vulnerable code path.
  3. Enable kernel KASAN in staging/canary environments — Kernel Address Sanitizer will detect the out-of-bounds write at runtime and panic the kernel, providing early detection if any code path triggers the bug. Not suitable for production due to performance overhead, but valuable for validating patch coverage.
  4. Monitor ebtables module loads via auditd — Add audit rules for NETFILTER and ebtables module loading events. Any unexpected ebtables activity on hosts without bridge networking is an anomaly worth investigating: auditctl -w /sbin/ebtables -p x -k ebtables_exec.
What doesn't work
  • Network-level firewalling / WAF — This is a local privilege escalation bug, not a remote exploit. No amount of perimeter filtering changes the attack surface.
  • Disabling bridge networking entirely — While theoretically effective, this breaks container networking (Docker bridge, Kubernetes CNI) and is impractical for most environments.
  • AppArmor/SELinux alone — Standard container profiles do not restrict CAP_NET_ADMIN if the capability is explicitly granted in the pod spec. The MAC policy must be paired with capability restrictions.
06 · Verification

Crowdsourced verification payload.

Run this script on each target Linux host as root (or with sudo). It checks the running kernel version against known-fixed versions. Invoke: sudo bash check_cve_2026_53266.sh

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# CVE-2026-53266 Checker — netfilter ebtables SNAT ARP rewrite OOB write
# Run as root on target Linux host
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -euo pipefail

KERNEL=$(uname -r)
echo "[*] Checking CVE-2026-53266 on kernel: $KERNEL"

# Extract major.minor.patch
VER=$(echo "$KERNEL" | grep -oP '^[0-9]+\.[0-9]+\.[0-9]+')
MAJOR=$(echo "$VER" | cut -d. -f1)
MINOR=$(echo "$VER" | cut -d. -f2)
PATCH=$(echo "$VER" | cut -d. -f3)

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

# Version comparison helper
ver_gte() {
  # Returns 0 if $1.$2.$3 >= $4.$5.$6
  local a1=$1 a2=$2 a3=$3 b1=$4 b2=$5 b3=$6
  if [ "$a1" -gt "$b1" ]; then return 0; fi
  if [ "$a1" -lt "$b1" ]; then return 1; fi
  if [ "$a2" -gt "$b2" ]; then return 0; fi
  if [ "$a2" -lt "$b2" ]; then return 1; fi
  if [ "$a3" -ge "$b3" ]; then return 0; fi
  return 1
}

# Bug introduced in 5.10 (commit 63137bc5882a)
# Not affected: < 5.10
if [ "$MAJOR" -lt 5 ] || { [ "$MAJOR" -eq 5 ] && [ "$MINOR" -lt 10 ]; }; then
  echo "PATCHED — kernel $VER predates the vulnerable commit (introduced in 5.10)"
  exit 0
fi

# Fixed versions per stable branch:
# 5.10.259, 5.15.210, 6.1.176, 6.6.143, 6.12.94, 6.18.36
PATCHED=false

case "${MAJOR}.${MINOR}" in
  5.10) ver_gte $MAJOR $MINOR $PATCH 5 10 259 && PATCHED=true ;;
  5.15) ver_gte $MAJOR $MINOR $PATCH 5 15 210 && PATCHED=true ;;
  5.1[1-4]|5.1[6-9]|5.[2-9]*)
    # 5.11-5.14, 5.16-5.x: no stable fix backported; check if >= 6.1.176
    PATCHED=false ;;
  6.1)  ver_gte $MAJOR $MINOR $PATCH 6 1 176 && PATCHED=true ;;
  6.6)  ver_gte $MAJOR $MINOR $PATCH 6 6 143 && PATCHED=true ;;
  6.12) ver_gte $MAJOR $MINOR $PATCH 6 12 94  && PATCHED=true ;;
  6.18) ver_gte $MAJOR $MINOR $PATCH 6 18 36  && PATCHED=true ;;
  6.19|6.[2-9][0-9]|[7-9].*)
    # Kernel newer than 6.18 — likely includes the fix
    echo "PATCHED — kernel $VER is newer than all affected branches (assuming fix included)"
    exit 0 ;;
  *)
    # Unsupported/EOL branch between known fixed versions
    PATCHED=false ;;
esac

if $PATCHED; then
  echo "PATCHED — kernel $VER is at or above the fix for this branch"
  exit 0
else
  echo "VULNERABLE — kernel $VER is in the affected range for CVE-2026-53266"
  echo "  Fix versions: 5.10.259, 5.15.210, 6.1.176, 6.6.143, 6.12.94, 6.18.36"
  exit 1
fi
07 · Bottom Line

If you remember one thing.

TL;DR
This is a standard patch-cycle item, not an emergency. With a noisgate reassessed severity of MEDIUM, there is no mitigation SLA — go straight to the 365-day noisgate remediation SLA window and roll the kernel fix into your next scheduled patching cycle. If you run Kubernetes clusters, use this as a catalyst to audit CAP_NET_ADMIN grants across all namespaces this month — that single action eliminates the containerized attack path entirely. Prioritize patching container host kernels and any system where bridge networking with ebtables is actively configured. For bare-metal servers without bridge networking, this can sit in your normal quarterly kernel update cadence. No emergency out-of-band patching is warranted given zero exploitation in the wild and no public PoC.

Sources

  1. Ubuntu Security Advisory — CVE-2026-53266
  2. Red Hat Bugzilla — CVE-2026-53266
  3. SUSE CVE Entry — CVE-2026-53266
  4. NVD Detail — CVE-2026-53266
  5. linux-cve-announce Disclosure — Ratatoskr
  6. Netfilter Patch Series — Ratatoskr
  7. OpenCVE — CVE-2026-53266
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.