← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2026-46300 · CWE-787 · Disclosed 2026-05-23

In the Linux kernel

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is a hidden trapdoor inside the server room, not an unlocked front door

CVE-2026-46300 is a Linux kernel sk_buff flag-propagation bug in the XFRM ESP-in-TCP path: during skb_try_coalesce(), shared page-backed fragments can be moved into a new skb without preserving SKBFL_SHARED_FRAG. Later ESP processing may then wrongly treat those fragments as safe for in-place writes, enabling page-cache corruption and local privilege escalation. Authoritative distro tracking says the published Fragnesia PoCs need the espintcp module, which first appeared upstream in Linux v5.6; older kernels such as Ubuntu 4.15/5.4 are therefore not affected in practice by the public exploit path, while affected enterprise kernels are mostly modern distro backports and custom vendor builds.

The vendor/NVD HIGH label is technically understandable because successful exploitation can end in root, but it overstates enterprise patch urgency for most fleets. This bug is not an internet-reachable initial access issue: it requires local code execution, vulnerable kernel support for the ESP-in-TCP path, and in many practical exploit chains unprivileged user namespaces or equivalent workload freedom. That makes it a post-compromise amplifier, not a front-door breach, so the real-world priority lands at MEDIUM unless you run multi-tenant Linux compute, Kubernetes nodes that execute untrusted workloads, or developer boxes with permissive namespace settings.

"Serious kernel bug, but it is still a post-compromise local privesc with real deployment friction."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Land local code execution

The attacker already needs a foothold on the Linux host or in a container/pod with enough syscall freedom to execute the exploit. The public weaponized reference is the v12-security/pocs fragnesia PoC disclosed with the bug. This is the decisive friction point: the CVE does nothing for a purely remote attacker without prior access.
Conditions required:
  • Local shell, container execution, or equivalent code execution on the target host
  • Ability to run native binaries and relevant networking syscalls
Where this breaks in practice:
  • Requires prior compromise or tenant code execution
  • Bastion-only servers and appliance-style hosts often have no untrusted local users
Detection/coverage: Network scanners do not see this step. EDR, auditd, container runtime telemetry, and shell history are the right controls.
STEP 02

Reach the vulnerable ESP-in-TCP surface

The exploit path needs the IPsec ESP modules (esp4/esp6) and the espintcp functionality to be present and usable. Multiple vendors note that blacklisting the ESP modules blocks the attack entirely, and Ubuntu notes the public PoCs depend on espintcp, introduced upstream in v5.6.
Conditions required:
  • esp4 or esp6 available or autoloadable
  • Kernel/new enough distro build supporting the exploit path
  • IPsec ESP modules not blacklisted
Where this breaks in practice:
  • Many fleets do not use IPsec on general-purpose servers
  • Module blacklists already deployed for Dirty Frag also block this bug
Detection/coverage: Host config review is effective: check module blacklist state and whether esp4/esp6 are loadable. Nessus added Linux distro coverage for this CVE.
STEP 03

Trigger skb coalescing with shared fragments

The exploit abuses skb_try_coalesce() so shared page-backed fragments are transferred without preserving the shared-frag marker. That breaks the later safety check used by ESP processing to decide whether copy-on-write is needed before decryption.
Conditions required:
  • Vulnerable kernel code path present
  • Attacker can drive traffic/state to produce the coalescing condition
Where this breaks in practice:
  • This is kernel-state choreography, not a one-packet crash
  • Distro backports and related fixes can invalidate public exploit assumptions
Detection/coverage: Little direct signature coverage. Memory corruption is logic-driven rather than a clean crash, so kernel oops-based detection is weak.
STEP 04

Force in-place ESP writes into page cache

Once the marker is lost, ESP input can decrypt in place over fragments that still reference page-cache-backed data. The public analysis describes turning this into controlled byte writes against cached contents of root-owned read-only files, enabling a deterministic local privilege escalation chain.
Conditions required:
  • Vulnerable skb reaches ESP input with the marker stripped
  • Chosen file content is resident in page cache
Where this breaks in practice:
  • Exploit reliability depends on kernel behavior and exact environment
  • Some hardened hosts restrict namespaces or surrounding primitives needed by the PoC
Detection/coverage: Traditional file integrity monitoring misses this because the disk file is untouched; the corruption is in page cache.
STEP 05

Execute the page-cache payload as root

The published PoC overwrites cached bytes of /usr/bin/su and then executes it to obtain elevated privileges. That is high impact, but the blast radius remains the single compromised host unless the attacker is already operating broadly across the fleet.
Conditions required:
  • Writable exploit target in page cache
  • Ability to execute the modified cached binary
Where this breaks in practice:
  • Requires chaining several host-local conditions first
  • Produces root on a host the attacker already reached, not remote fleet-wide compromise
Detection/coverage: Look for anomalous execution of su, namespace creation, module load attempts, and suspicious local binaries. Disk-hash tools alone will not catch the page-cache overwrite.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo confirmed in-the-wild exploitation found in the sources reviewed; CISA KEV does not list this CVE.
Public exploit / PoCYes. Public PoC released by William Bowling / V12 Security in v12-security/pocs (fragnesia).
EPSS0.00254 from the user-supplied intel; that is a low predicted exploitation probability signal, consistent with a local-only kernel bug.
KEV statusNot KEV-listed based on review of the CISA KEV catalog.
CVSS vector meaningCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H means local, low-complexity, low-privilege exploitation with full host impact after compromise. The weak point is the AV:L prerequisite.
Affected versionsUbuntu states the public Fragnesia PoCs require espintcp, which first appeared upstream in Linux v5.6; older kernels like Ubuntu 4.15/5.4 are not affected in practice by the public exploit path.
Fixed versionsNo single universal upstream version string is enough because enterprise kernels use backports. Ubuntu tracks fixes by commits f84eca5 and 48f6a53; Red Hat and other vendors shipped patched kernel builds in later advisories.
Exposure / scanning realityInternet exposure data is largely irrelevant: Shodan/Censys/FOFA do not meaningfully measure a local kernel LPE. What matters is host population with local code execution opportunities, untrusted containers, and loadable esp4/esp6.
Disclosure timelinePublic disclosure and PoC release landed on 2026-05-13; the CVE record shows publication on 2026-05-23.
Researcher / reportingPublicly attributed to William Bowling / V12 Security; follow-on technical discussion and mitigation guidance came from Ubuntu, Red Hat, and kernel community threads on oss-security.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.9/10)

The single biggest reason this is not HIGH for most enterprises is that it requires local code execution first; this is a post-initial-access privilege escalation, not an external entry point. Public PoC availability matters, but the reachable population narrows again around esp4/esp6 availability, espintcp support, and namespace/workload freedom on the target host.

HIGH Assessment that this is a local post-compromise bug rather than an internet-scale initial access issue
MEDIUM Assessment of practical exploitability across mixed enterprise distros and hardened container fleets

Why this verdict

  • Down from vendor HIGH: requires AV:L + prior foothold. An attacker must already be on the box or in a runnable container/pod, which implies a separate compromise stage has already succeeded.
  • Reachability is narrower than generic kernel LPEs. Real exploitation needs the ESP/XFRM path, loadable esp4/esp6, and for the public Fragnesia chain the espintcp functionality called out by Ubuntu.
  • Modern fleet controls cut the population further. Module blacklists, restricted unprivileged user namespaces, SELinux/AppArmor, and tight container syscall policies materially reduce the number of actually exploitable hosts.
  • Still not low because impact is real and PoC is public. Successful exploitation can produce root on Linux hosts, including shared compute and some Kubernetes nodes, and defenders should not ignore a deterministic public exploit.

Why not higher?

There is no unauthenticated remote path here. Even a low-privilege attacker must already have code execution on the target and then satisfy several environment-specific prerequisites, which compounds downward pressure on severity in real fleets.

Why not lower?

This is still a kernel-level privilege escalation with a public PoC and credible host takeover impact. On multi-tenant Linux infrastructure, CI runners, and Kubernetes nodes that execute untrusted workloads, the business risk is meaningfully above routine backlog hygiene.

05 · Compensating Control

What to do — in priority order.

  1. Blacklist esp4 and esp6 where IPsec is not required — Deploy the same Dirty Frag-style module block on general-purpose Linux servers and container hosts that do not need kernel IPsec ESP. This directly removes the reachable attack surface and is the best compensating control; for a MEDIUM verdict there is no noisgate mitigation SLA, but do it during the next normal hardening/change window rather than waiting for annual patch cleanup.
  2. Restrict unprivileged user namespaces — Where operationally safe, disable or tightly control unprivileged user namespaces because they are a common requirement for local/container exploitability in this family. Use this especially on shared compute, developer workstations, and Kubernetes worker nodes that run semi-trusted workloads; again, there is no noisgate mitigation SLA, but this belongs in the next hardening cycle.
  3. Prioritize multi-tenant Linux first — Treat Kubernetes nodes, CI runners, shared jump hosts, and VDI/developer fleets as the hot subset because they have the highest chance of already satisfying the local-code-exec prerequisite. Single-purpose appliances and tightly controlled backend servers can follow the normal MEDIUM remediation path.
  4. Watch for page-cache style post-exploitation — Tune EDR/audit rules for namespace creation, unusual module load attempts, and suspicious execution of binaries like su from already-compromised low-privilege contexts. This will not prevent the kernel bug, but it can shorten dwell time if someone is using the public PoC.
What doesn't work
  • Perimeter firewalls and WAFs do nothing here because this is not an externally reachable network service bug.
  • Disk-only file integrity monitoring can miss the attack because the public exploit path targets the page cache while leaving the on-disk file unchanged.
  • Assuming 'no IPsec configured' equals safety is weak by itself; if the modules remain loadable, an attacker may still be able to reach the vulnerable surface unless they are blacklisted or absent.
06 · Verification

Crowdsourced verification payload.

Run this on the target Linux host as root or with sudo; it inspects kernel version, module availability/blacklist state, and namespace settings to determine whether the host is practically exposed to the public Fragnesia path. Save as check-cve-2026-46300.sh and run sudo bash check-cve-2026-46300.sh.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2026-46300.sh
# Heuristic exposure check for CVE-2026-46300 / Fragnesia.
# Outputs one of: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u

ver_lt() {
  [ "$1" = "$2" ] && return 1
  [ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -n1)" = "$1" ]
}

status="UNKNOWN"
reason=""

kernel_release="$(uname -r 2>/dev/null)"
kernel_base="${kernel_release%%-*}"

# Heuristic 1: public PoC path needs espintcp introduced upstream in v5.6.
if ver_lt "$kernel_base" "5.6"; then
  echo "PATCHED - kernel $kernel_release is older than upstream v5.6; Ubuntu notes the public Fragnesia PoC path is not affected in practice on older kernels."
  exit 0
fi

# Helper: is module blacklisted?
module_blacklisted() {
  local mod="$1"
  if command -v modprobe >/dev/null 2>&1; then
    local out
    out="$(modprobe -n -v "$mod" 2>/dev/null || true)"
    echo "$out" | grep -Eq 'install /bin/(false|true)' && return 0
  fi
  if grep -RqsE "^[[:space:]]*install[[:space:]]+$mod[[:space:]]+/bin/(false|true)" /etc/modprobe.d /run/modprobe.d /usr/lib/modprobe.d 2>/dev/null; then
    return 0
  fi
  return 1
}

# Helper: does module exist on disk or loaded?
module_present() {
  local mod="$1"
  lsmod 2>/dev/null | awk '{print $1}' | grep -qx "$mod" && return 0
  find "/lib/modules/$(uname -r)" -type f \( -name "$mod.ko" -o -name "$mod.ko.xz" -o -name "$mod.ko.zst" \) >/dev/null 2>&1 && return 0
  return 1
}

esp4_present=0
esp6_present=0
esp4_blocked=1
esp6_blocked=1
userns_enabled=0

module_present esp4 && esp4_present=1
module_present esp6 && esp6_present=1
module_blacklisted esp4 && esp4_blocked=0
module_blacklisted esp6 && esp6_blocked=0

# user.max_user_namespaces > 0 means user namespaces are enabled
if [ -r /proc/sys/user/max_user_namespaces ]; then
  umn="$(cat /proc/sys/user/max_user_namespaces 2>/dev/null || echo 0)"
  case "$umn" in
    ''|*[!0-9]*) userns_enabled=0 ;;
    0) userns_enabled=0 ;;
    *) userns_enabled=1 ;;
  esac
fi

# If neither ESP module is present, practical exploitability is removed.
if [ "$esp4_present" -eq 0 ] && [ "$esp6_present" -eq 0 ]; then
  echo "PATCHED - esp4/esp6 modules are not present for kernel $kernel_release."
  exit 0
fi

# If both are effectively blocked, treat as patched/not exploitable for this path.
if [ "$esp4_blocked" -eq 0 ] && [ "$esp6_blocked" -eq 0 ]; then
  echo "PATCHED - esp4 and esp6 are blacklisted/disabled, removing the public Fragnesia exploit path."
  exit 0
fi

# If namespaces are enabled and at least one ESP module is available, likely exposed.
if [ "$userns_enabled" -eq 1 ] && { [ "$esp4_present" -eq 1 ] || [ "$esp6_present" -eq 1 ]; }; then
  echo "VULNERABLE - kernel $kernel_release is new enough for the public exploit path, at least one ESP module is available, and unprivileged user namespaces are enabled. Verify vendor backport status and patch level immediately."
  exit 1
fi

# Otherwise we cannot be sure: distro backports and local hardening vary.
echo "UNKNOWN - prerequisites are mixed on kernel $kernel_release. Check vendor advisory/backport status for your distro and whether esp4/esp6 can be loaded by local workloads."
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, split the fleet instead of panic-patching everything: identify Linux hosts that run untrusted local code or containers, then check whether esp4/esp6 are present or already blacklisted. For this MEDIUM reassessment there is no noisgate mitigation SLA — go straight to the 365-day remediation window for the general fleet, but move shared compute, Kubernetes workers, CI runners, and developer systems to the front of that queue and apply the vendor kernel update within the noisgate remediation SLA of ≤365 days; if those hot subsets do not need kernel IPsec, block esp4/esp6 in the next normal change window rather than waiting for annual patch cleanup.

Sources

  1. NVD CVE-2026-46300
  2. Ubuntu CVE tracker for CVE-2026-46300
  3. Ubuntu mitigation blog for Fragnesia
  4. oss-security disclosure thread
  5. V12 Security public PoC repository
  6. Red Hat Dirty Frag / Fragnesia advisory
  7. CISA Known Exploited Vulnerabilities catalog
  8. FIRST EPSS API reference
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.