Back to Intelligence

USN-8819-2: Linux Kernel Flaws in NFS, IPv6, and Netfilter (CVE-2025-38724, CVE-2026-53131, CVE-2026-53221) — Detection and Patching Guide

SA
Security Arsenal Team
September 26, 2026
11 min read

Canonical has published USN-8819-2, a Linux kernel security update addressing three vulnerabilities — CVE-2025-38724, CVE-2026-53131, and CVE-2026-53221 — affecting three distinct kernel subsystems: the Network File System (NFS) server daemon, the IPv6 networking stack, and Netfilter. Per the advisory, an attacker could potentially use these flaws to compromise the system outright.

This is a trifecta that should get every infrastructure team's attention. Netfilter and the IPv6 stack are present on virtually every Linux host, and the NFS server daemon (nfsd) is ubiquitous on file servers, NAS appliances, and storage backends. Kernel-space vulnerabilities in these subsystems historically translate into two impact classes defenders care deeply about: local privilege escalation to root (the classic Netfilter pattern) and remotely triggered memory corruption or denial of service against exposed network services. Either path ends with an attacker owning the kernel — and once the kernel is gone, EDR visibility, integrity guarantees, and every security control above it go with it.

If you run Ubuntu LTS fleets — 22.04, 24.04, or derivative kernels including AWS, Azure, and GCP Ubuntu images — treat this as a priority patch cycle, not a routine one.

Technical Analysis

Affected Components and Platforms

USN-8819-2 corrects flaws in:

  • NFS server daemon (nfsd) — the kernel-side server implementation handling NFSv3/v4 requests. Systems exporting shares via /etc/exports are the exposure surface.
  • IPv6 networking — the kernel's IPv6 packet processing path. Any dual-stack host (which is the default on modern Ubuntu) carries this attack surface even if you believe you're "IPv4-only."
  • Netfilter (nf_tables / iptables backend) — the packet filtering and NAT framework. Netfilter has been a prolific source of local privilege escalation CVEs over the past several years precisely because it is reachable from unprivileged user namespaces.

CVEs

CVESubsystemDefender Concern
CVE-2025-38724Linux kernel (per USN-8819-2)Potential system compromise
CVE-2026-53131Linux kernel (per USN-8819-2)Potential system compromise
CVE-2026-53221Linux kernel (per USN-8819-2)Potential system compromise

Canonical's advisory groups these three CVEs with the three affected subsystems. At the time of writing, full CVSS vector details were not published in the summary notice; consult the individual CVE pages linked from the USN for scoring as it becomes available. Do not wait on a CVSS number to act — Ubuntu kernel USNs are issued for exploitable flaws, and the NFS/Netfilter combination demands urgency.

How Exploitation Typically Works (Defender's Perspective)

Without speculating beyond the advisory, the defensive-relevant exploitation patterns for these three subsystems are well-established:

  1. Netfilter LPE pattern: An unprivileged local user creates a user namespace (unshare -Urn), gaining "root" inside the namespace, which unlocks the nf_tables API. Attacker-controlled table/chain/set operations then trigger the kernel flaw — typically a use-after-free or out-of-bounds write — yielding real root. This is why unprivileged user namespaces are the single most important hardening knob for this bug class.

  2. IPv6 remote pattern: Specially crafted IPv6 traffic (extension headers, fragmented packets, ICMPv6) reaches the kernel's parsing path on any interface with IPv6 enabled — including link-local, which is on by default and reachable from the local network segment without any routing.

  3. NFS server pattern: Malformed NFS RPC traffic directed at a host running nfsd triggers the server-side flaw. Exposure is any host exporting shares, reachable on TCP/UDP 2049 — frequently flat, trusted internal networks where segmentation is weakest.

Exploitation Status

The notice does not indicate confirmed in-the-wild exploitation, and none of these CVEs appear on the CISA Known Exploited Vulnerabilities catalog as of publication. However, kernel bugs in these subsystems historically see rapid public PoC development once patches land (patch diffing is standard practice among exploit developers). The window between "patch available" and "working public exploit" for Netfilter-class bugs has repeatedly been measured in days to weeks. Patch before that window closes.

Detection & Response

Honest assessment from the SOC side: you will not write a high-fidelity rule that fires on the kernel memory corruption itself. What you can detect is the exploitation scaffolding — the namespace creation, the anomalous nft/nfsd activity, and the kernel's own crash telemetry. Those are the signals a veteran analyst actually hunts.

Sigma Rules

YAML
---
title: Unprivileged User Namespace Creation Followed by Netfilter Interaction
id: 8f2b6c41-3d9e-4a7b-b512-9c4e6f0a1d23
status: experimental
description: Detects an unprivileged process creating user/network namespaces and interacting with nftables, a common precursor pattern for Netfilter local privilege escalation exploits such as those targeting the Linux kernel Netfilter subsystem (USN-8819-2).
references:
  - https://ubuntu.com/security/notices/USN-8819-2
  - https://attack.mitre.org/techniques/T1068/
author: Security Arsenal
date: 2026/02/10
tags:
  - attack.privilege_escalation
  - attack.t1068
logsource:
  category: process_creation
  product: linux
detection:
  selection_unshare:
    Image|endswith: '/unshare'
    CommandLine|contains:
      - '-U'
      - '--user'
  selection_netns:
    CommandLine|contains:
      - 'net'
      - '-n'
      - '--net'
  selection_nft:
    Image|endswith:
      - '/nft'
      - '/nftables'
  condition: selection_unshare and selection_netns or (selection_unshare and selection_nft)
falsepositives:
  - Container tooling (podman, rootless docker) legitimate namespace use
  - Developer sandboxing workflows
level: high
---
title: Kernel Oops or BUG Message in System Logs
id: 1c7a9e52-6b3d-4f28-a094-5d8b2c7e3f41
status: experimental
description: Detects kernel oops, BUG, or general protection fault messages in Linux logs, which may indicate failed or successful exploitation attempts against kernel vulnerabilities including NFS, IPv6, and Netfilter flaws addressed in USN-8819-2.
references:
  - https://ubuntu.com/security/notices/USN-8819-2
  - https://attack.mitre.org/techniques/T1068/
author: Security Arsenal
date: 2026/02/10
tags:
  - attack.privilege_escalation
  - attack.t1068
logsource:
  product: linux
  service: kernel
detection:
  selection:
    Message|contains:
      - 'kernel BUG at'
      - 'general protection fault'
      - 'Oops:'
      - 'KASAN:'
      - 'BUG: unable to handle page fault'
      - 'use-after-free'
  filter_subsystems:
    Message|contains:
      - 'nfsd'
      - 'nf_tables'
      - 'ipv6'
  condition: selection
falsepositives:
  - Hardware faults and driver instability (investigate, but these still warrant triage)
level: high
---
title: Unexpected nfsd Kernel Thread or NFS Export Modification
id: 4e5d2b87-9a1c-4e63-b7f2-2a6c9d1e8b35
status: experimental
description: Detects modification of NFS export configuration or activation of the NFS server daemon on hosts where it is not expected, relevant to exposure from the nfsd vulnerability addressed in USN-8819-2.
references:
  - https://ubuntu.com/security/notices/USN-8819-2
  - https://attack.mitre.org/techniques/T1021/
author: Security Arsenal
date: 2026/02/10
tags:
  - attack.lateral_movement
  - attack.persistence
logsource:
  category: process_creation
  product: linux
detection:
  selection:
    Image|endswith:
      - '/exportfs'
      - '/rpc.nfsd'
      - '/rpc.mountd'
  condition: selection
falsepositives:
  - Legitimate storage administration on known file servers (allowlist by host)
level: medium

KQL — Microsoft Sentinel / Defender

This hunts the exploitation scaffolding via Syslog ingestion (Ubuntu hosts forwarding auth/syslog via the AMA agent) and kernel telemetry. Tune the host allowlists to your environment.

KQL — Microsoft Sentinel / Defender
// Hunt 1: Unprivileged namespace creation + nftables usage (Netfilter LPE pattern)
Syslog
| where TimeGenerated > ago(7d)
| where ProcessName =~ "unshare" or ProcessName =~ "nft"
| where SyslogMessage has_any ("--user", "-U", "--net", "-n", "add table", "add chain", "add set")
| project TimeGenerated, Computer, ProcessName, SyslogMessage, HostIP
| order by TimeGenerated desc
;

// Hunt 2: Kernel crash telemetry tied to affected subsystems
Syslog
| where TimeGenerated > ago(7d)
| where Facility =~ "kern"
| where SyslogMessage has_any ("kernel BUG", "Oops", "general protection fault", "use-after-free", "KASAN")
| where SyslogMessage has_any ("nfsd", "nf_tables", "nfnetlink", "ipv6", "ip6_")
| project TimeGenerated, Computer, SeverityLevel, SyslogMessage
| order by TimeGenerated desc
;

// Hunt 3: Hosts still running kernels that predate the USN-8819-2 patch
// Populate KernelVersions with your fleet's uname -r collection (e.g., via Heartbeat custom fields or a watchlist)
Heartbeat
| where TimeGenerated > ago(1d)
| where OSType =~ "Linux"
| summarize LastSeen=max(TimeGenerated) by Computer, OSName, OSMajorVersion, OSMinorVersion
| join kind=inner (
    Syslog
    | where TimeGenerated > ago(1d)
    | where SyslogMessage has "Linux version"
    | summarize arg_max(TimeGenerated, *) by Computer
    | project Computer, KernelString=SyslogMessage
) on Computer
| project Computer, OSName, OSMajorVersion, OSMinorVersion, KernelString, LastSeen

Velociraptor VQL

Use this artifact to sweep your Ubuntu fleet and identify hosts that are (a) running kernels older than the patched build and (b) actively exposing the vulnerable surface — loaded nfsd/nf_tables modules and active IPv6.

VQL — Velociraptor
-- USN-8819-2 exposure sweep: kernel version + vulnerable subsystem exposure
LET kernel = SELECT Stdout FROM execve(argv=['/bin/uname', '-r'])
LET mods = SELECT Name, Size, UsedBy FROM parse_file(filename='/proc/modules', accessor='data')
LET nfsd = SELECT * FROM foreach(row=mods, query={
  SELECT Name FROM scope() WHERE Name =~ 'nfsd|nfs_acl|lockd'
})
LET netfilter = SELECT * FROM foreach(row=mods, query={
  SELECT Name FROM scope() WHERE Name =~ 'nf_tables|nfnetlink|nft_'
})

SELECT
  { SELECT Stdout FROM kernel } AS KernelVersion,
  nfsd AS NFSModulesLoaded,
  netfilter AS NetfilterModulesLoaded,
  if(condition=nfsd, then='NFS SERVER EXPOSED', else='nfsd not loaded') AS NFSExposure,
  if(condition=netfilter, then='Netfilter active (expected on most hosts)', else='') AS NetfilterStatus
FROM scope()

For live network exposure (is this host actually listening on 2049 or forwarding IPv6?), add:

VQL — Velociraptor
-- Identify NFS listeners and IPv6 sockets on the host
SELECT Pid, Name, Family, Type, Laddr, Lport, Status
FROM netstat()
WHERE Lport in (2049, 111, 20048)
   OR Family =~ 'IPv6'

Remediation & Verification Script

The following Bash script checks the current kernel against the patched baseline, applies the update, flags whether a reboot is pending, and applies the key hardening mitigation (restricting unprivileged user namespaces) as defense-in-depth.

Bash / Shell
#!/usr/bin/env bash
# USN-8819-2 remediation & verification script for Ubuntu hosts
# Run as root. Tested on Ubuntu 22.04 / 24.04.

set -euo pipefail

echo "=== [1/5] Current kernel ==="
uname -r

echo "=== [2/5] Applying security updates ==="
apt-get update -y
apt-get install --only-upgrade -y linux-image-generic linux-headers-generic || \
  apt-get dist-upgrade -y

echo "=== [3/5] Hardening: restrict unprivileged user namespaces (Netfilter LPE mitigation) ==="
# This breaks the most common exploitation primitive for Netfilter LPE bugs.
# NOTE: may impact rootless containers (podman) — test before fleet-wide rollout.
sysctl -w kernel.unprivileged_userns_clone=0 2>/dev/null || true
cat > /etc/sysctl.d/99-userns-hardening.conf <<'EOF'
kernel.unprivileged_userns_clone=0
EOF
# Ubuntu 23.10+ AppArmor-based restriction:
if [ -f /proc/sys/kernel/apparmor_restrict_unprivileged_userns ]; then
  sysctl -w kernel.apparmor_restrict_unprivileged_userns=1
  echo "kernel.apparmor_restrict_unprivileged_userns=1" >> /etc/sysctl.d/99-userns-hardening.conf
fi

echo "=== [4/5] Reduce exposed surface where not required ==="
# Disable nfsd if this host is not a file server:
if ! systemctl is-enabled nfs-server &>/dev/null; then
  systemctl stop nfs-server 2>/dev/null || true
  systemctl mask nfs-server 2>/dev/null || true
  echo "nfs-server stopped/masked (not enabled on this host)."
fi
# If IPv6 is genuinely unused, disable it (verify with network team first):
# sysctl -w net.ipv6.conf.all.disable_ipv6=1
# sysctl -w net.ipv6.conf.default.disable_ipv6=1

echo "=== [5/5] Reboot check ==="
if [ -f /var/run/reboot-required ]; then
  echo "REBOOT REQUIRED: kernel updated but not running. Schedule reboot now."
  cat /var/run/reboot-required.pkgs 2>/dev/null || true
else
  echo "No reboot pending. Verify running kernel: uname -r"
fi

Remediation

  1. Patch immediately. Apply USN-8819-2 via apt update && apt upgrade (or your configuration management pipeline) on all affected Ubuntu systems. The exact patched kernel package versions for your release and kernel flavor (generic, AWS, Azure, GCP, lowlatency, OEM) are enumerated in the advisory: https://ubuntu.com/security/notices/USN-8819-2. Canonical's notices list per-flavor fixed versions — confirm yours against the table.

  2. Reboot — a kernel patch without a reboot is not a patch. The running kernel remains vulnerable until the host reboots into the updated image. Track /var/run/reboot-required across your fleet and alert on hosts that sit un-rebooted more than 24–48 hours after patching. Consider Canonical Livepatch if reboot windows are your blocker, but verify Livepatch coverage for these specific CVEs — not every kernel fix is livepatchable.

  3. Restrict unprivileged user namespaces. Until every host is patched and rebooted, kernel.unprivileged_userns_clone=0 (or kernel.apparmor_restrict_unprivileged_userns=1 on newer Ubuntu) removes the most common local exploitation primitive for Netfilter-class bugs. Test against rootless container workloads first.

  4. Reduce the NFS exposure surface. Inventory every host running nfsd (the VQL above does this at scale). If a host isn't a file server, stop and mask nfs-server. For legitimate NFS servers, enforce export restrictions in /etc/exports, restrict TCP/UDP 2049 and related RPC ports at the network layer, and confirm NFS is not reachable from untrusted segments. Shodan-exposed NFS is more common than anyone wants to admit.

  5. Audit IPv6 posture. If you are not actively operating IPv6, disable it (net.ipv6.conf.all.disable_ipv6=1) — this eliminates an entire vulnerable code path. If you do run IPv6, ensure RA guard / ICMPv6 filtering on the segment, since link-local attacks require no routed access.

  6. Hunt the window. Run the Sigma/KQL/VQL detections above across the period before your fleet was patched. Kernel oops messages referencing nfsd, nf_tables, or ipv6 on a host that was running a vulnerable kernel warrant a forensic look — check for unexpected privilege transitions, new SUID binaries, and persistence in the post-incident timeframe.

  7. Verify and document. Post-reboot, confirm uname -r matches the fixed version in the USN and feed compliance evidence into your vulnerability management platform. If you operate under PCI-DSS (Req. 6.2) or HIPAA Security Rule patching requirements, kernel CVEs with a system-compromise impact statement belong in your expedited patch SLA, not the 30/90-day queue.

Related Resources

Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.