Canonical has published USN-8664-1, a Linux kernel security update for NVIDIA BaseOS — the Ubuntu-derived operating system that underpins NVIDIA's DGX and enterprise GPU platforms. This is not a routine kernel roll-up. The headline fix addresses CVE-2025-54518, a processor-level isolation flaw in AMD Zen 2 CPUs that allows a local, unprivileged attacker to corrupt instructions executed at a higher privilege level — a direct path to unauthorized privilege gain.
Read that again: this is not a software bug in a kernel function. It is a microarchitectural isolation failure in the CPU's operation (op) cache — the same class of problem that brought us Spectre and Meltdown, but with a concrete primitive: instruction corruption across privilege boundaries. Any workload sharing a Zen 2 host — a container escape candidate, a malicious CI job, a compromised low-privilege service account — can potentially leverage this to seize kernel or hypervisor-level control.
Compounding the risk, the same update patches multiple additional flaws across a sprawling list of kernel subsystems: x86 platform drivers, the Cryptographic API, the PSP (Platform Security Processor) security protocol, ARM32/ARM64, MIPS, PowerPC, RISC-V, S390, User-Mode Linux, the x86 architecture core, the block layer, the Intel NPU driver, and the Compute Acceleration subsystem. The breadth of affected subsystems means a wide attack surface of local privilege escalation and compromise vectors — and on GPU compute nodes running multi-tenant AI/ML workloads, that attack surface is shared by exactly the kind of untrusted code you should be worried about.
Bottom line for defenders: if you operate NVIDIA DGX systems, BaseOS-based GPU clusters, or any Ubuntu-derivative fleet on AMD Zen 2 hardware (Ryzen 3000/4000 series, EPYC Rome), treat this as a priority patch cycle with compensating detection until the reboot lands.
Technical Analysis
CVE-2025-54518 — AMD Zen 2 Operation Cache Isolation Failure
The operation cache (op cache) in AMD Zen 2 processors stores decoded micro-operations to accelerate instruction execution. The flaw: shared resources in the op cache are not properly isolated between execution contexts at different privilege levels. A local attacker executing unprivileged code can influence or corrupt cached micro-ops that are subsequently consumed by code running at a higher privilege level (ring 0 / kernel, or a more privileged sibling thread context).
Key exploitation characteristics from a defender's perspective:
- Attack vector: Local. The attacker must already execute code on the host. This makes it a post-compromise force multiplier and a container/multi-tenant breakout primitive.
- User interaction: None required.
- Complexity: Microarchitectural attacks historically require precise timing, but once a reliable PoC exists, exploitation is typically packaged into trivially reusable tooling. Assume weaponization follows disclosure quickly.
- Impact: Confidentiality, Integrity, and Availability — all high. Instruction corruption at ring 0 means arbitrary kernel memory control: credential theft, rootkit installation, hypervisor compromise, denial of service.
- Affected silicon: AMD Zen 2 family — including EPYC "Rome" server parts common in HPC and GPU cluster head nodes, and Ryzen 3000/4000 desktop/workstation parts.
Canonical has not, at publication time, assigned a public CVSS vector in the notice text; given the local-only vector with full privilege escalation impact, expect scoring consistent with high-severity local LPE flaws (CVSS 3.x High band, ~7.8 territory). Treat severity as High regardless of the final number — local-to-root on a shared compute node is a worst-case scenario for multi-tenant AI infrastructure.
The Broader Kernel Subsystem Fixes
USN-8664-1 also corrects flaws in:
| Subsystem | Defensive concern |
|---|---|
| Cryptographic API | Memory-safety flaws here can leak or corrupt key material and enable LPE via crypto API sockets (AF_ALG) |
| PSP security protocol | Bugs in AMD Platform Security Processor interfacing undermine the hardware root of trust itself |
| Block layer | Historically a rich source of use-after-free LPEs reachable by unprivileged users via io_uring and device ioctls |
| Intel NPU / Compute Accel drivers | New accelerator drivers are immature attack surface; ioctls exposed to unprivileged users are classic LPE vectors |
| Architecture cores (x86, ARM64, RISC-V, S390, MIPS, PowerPC, UML) | Cross-architecture syscall, ptrace, and context-handling flaws — several recent high-impact LPEs lived here |
Exploitation Status
At the time of writing, there is no confirmed in-the-wild exploitation and CVE-2025-54518 is not yet listed in CISA's Known Exploited Vulnerabilities catalog. The flaw is local-only, which tempers mass-exploitation risk but does nothing to reduce insider, post-compromise, or shared-tenancy risk. Microarchitectural primitives of this class are actively studied by both academic and state-sponsored researchers; the window between disclosure and public PoC for CPU errata has historically been measured in weeks to months. Do not wait for a KEV entry to act.
Detection & Response
You cannot signature-detect a microarchitectural op cache corruption directly — the primitive executes inside legitimate-looking attacker code. What you can detect are the precursors and post-exploitation behaviors: unprivileged processes loading kernel modules, abusing user namespaces, escalating to uid 0 unexpectedly, and tainting the kernel. On DGX/BaseOS nodes, your detection surface is auditd + syslog forwarded to your SIEM.
SIGMA Rules
---
title: Kernel Module Loaded by Non-Root Shell Context
description: Detects insmod/modprobe execution from interactive or service shell contexts, consistent with post-exploitation rootkit loading after local privilege escalation such as CVE-2025-54518. On GPU compute nodes, legitimate module loads occur at boot or via DKMS during driver updates — interactive loads are rare.
references:
- https://ubuntu.com/security/notices/USN-8664-1
- https://attack.mitre.org/techniques/T1547/006/
author: Security Arsenal
date: 2026/02/10
status: experimental
id: 3c8f1a72-6d4b-4e19-9a07-5f2d8c1b9e34
tags:
- attack.persistence
- attack.privilege_escalation
- attack.t1547.006
logsource:
product: linux
service: auditd
detection:
selection:
type: EXECVE
a0|contains:
- 'insmod'
- 'modprobe'
- 'kmod'
filter_boot_dkms:
a1|contains:
- '--allow-unsupported-modules'
- 'dkms'
condition: selection and not filter_boot_dkms
falsepositives:
- DKMS rebuilds after NVIDIA driver or kernel updates
- Hardware enablement scripts on DGX nodes
level: high
---
title: Unprivileged User Namespace Creation on GPU Compute Node
description: Detects unshare or clone invocations creating user namespaces, a common prerequisite for exploiting kernel LPE flaws (block layer, crypto API, io_uring paths) on multi-tenant Linux hosts. Many kernel LPE exploits require unprivileged user namespaces to reach vulnerable code paths.
references:
- https://ubuntu.com/security/notices/USN-8664-1
- https://attack.mitre.org/techniques/T1068/
author: Security Arsenal
date: 2026/02/10
status: experimental
id: 8b2e4d91-1c7a-4f35-b862-9d4e6a0c5f71
tags:
- attack.privilege_escalation
- attack.t1068
logsource:
product: linux
service: auditd
detection:
selection:
type: EXECVE
a0|contains: 'unshare'
selection_flags:
a1|contains:
- '--user'
- '-U'
- '--map-root-user'
condition: selection and selection_flags
falsepositives:
- Rootless container runtimes (podman, rootless docker) — baseline per host role
- Bubblewrap sandboxing used by Flatpak
level: medium
---
title: Kernel Taint Event — Out-of-Tree or Unsigned Module Load
description: Detects kernel taint messages indicating unsigned or out-of-tree module loading, a strong post-exploitation signal following ring-0 compromise via flaws such as CVE-2025-54518. Note that NVIDIA proprietary drivers legitimately taint the kernel on BaseOS/DGX systems — this rule targets taint flags NOT attributable to the NVIDIA driver load at boot.
references:
- https://ubuntu.com/security/notices/USN-8664-1
- https://attack.mitre.org/techniques/T1014/
author: Security Arsenal
date: 2026/02/10
status: experimental
id: 5f1a9c63-2e8d-4b47-a3f6-7c9d2e5b8a16
tags:
- attack.defense_evasion
- attack.t1014
logsource:
product: linux
service: syslog
detection:
selection:
- 'loading out-of-tree module taints kernel'
- 'module verification failed: signature and/or required key missing'
filter_nvidia_boot:
- 'nvidia'
- 'nvidia_drm'
- 'nvidia_modeset'
- 'nvidia_uvm'
condition: selection and not filter_nvidia_boot
falsepositives:
- Third-party vendor agents (backup, HSM, IB drivers such as MLNX_OFED)
- Custom DKMS modules in research environments
level: high
KQL — Microsoft Sentinel / Defender (Syslog & CEF ingestion)
This hunt assumes your BaseOS/DGX nodes forward auditd and syslog to Sentinel via the AMA Syslog or CEF connector. It surfaces the full local-LPE kill chain: namespace abuse, module loads, and post-exploitation root shells from unexpected parents.
// Hunt: local privilege escalation precursors on NVIDIA BaseOS / DGX nodes
// Relevant to CVE-2025-54518 and USN-8664-1 kernel subsystem LPEs
let Lookback = 7d;
let SuspiciousModuleLoad = Syslog
| where TimeGenerated > ago(Lookback)
| where ProcessName in~ ("insmod", "modprobe", "kmod")
| where SyslogMessage !has_any ("dkms", "nvidia", "mlnx")
| project TimeGenerated, Computer, ProcessName, SyslogMessage, HostIP
| extend Signal = "Out-of-band kernel module load";
let NamespaceAbuse = Syslog
| where TimeGenerated > ago(Lookback)
| where SyslogMessage has "unshare" and SyslogMessage has_any ("--user", "map-root-user", "CLONE_NEWUSER")
| project TimeGenerated, Computer, ProcessName, SyslogMessage, HostIP
| extend Signal = "User namespace creation (LPE precursor)";
let KernelTaint = Syslog
| where TimeGenerated > ago(Lookback)
| where SyslogMessage has_any ("out-of-tree module taints kernel", "signature and/or required key missing")
| where SyslogMessage !has_any ("nvidia", "nvidia_drm", "nvidia_modeset", "nvidia_uvm")
| project TimeGenerated, Computer, ProcessName, SyslogMessage, HostIP
| extend Signal = "Kernel taint — unsigned/OOT module";
union SuspiciousModuleLoad, NamespaceAbuse, KernelTaint
| summarize FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated), Signals = make_set(Signal), EventCount = count() by Computer
| extend Severity = case(array_length(Signals) >= 2, "HIGH — correlated LPE chain",
EventCount > 10, "MEDIUM — repeated precursor activity",
"LOW — isolated event")
| order by Severity asc, EventCount desc
Run this fleet-wide daily. A single host showing two or more correlated signals (namespace creation followed by module load) within a short window is a high-fidelity LPE indicator and warrants immediate triage.
Velociraptor VQL — Endpoint Hunt
This artifact inventories the fleet for exposure: it identifies Zen 2 hosts, checks whether they are running a kernel older than the USN-8664-1 patched build, and enumerates recently loaded non-NVIDIA kernel modules.
-- Hunt: NVIDIA BaseOS exposure to USN-8664-1 / CVE-2025-54518
-- Identifies AMD Zen 2 hosts, running kernel version, and suspicious loaded modules
LET cpuinfo <= SELECT * FROM split_string_to_array(
string=read_file(filename='/proc/cpuinfo'), sep='\n\n')
LET cpu_model = SELECT parse_string_with_regex(
string=cpuinfo.Data[0], regex='model name\\s*:\\s*(.+)').g1 AS Model
FROM scope()
LET kernel <= SELECT uname.release AS Release, uname.version AS Version FROM info()
LET suspicious_modules = SELECT Name, FullPath, MTime
FROM glob(globs='/sys/module/*', accessor='file')
WHERE NOT Name =~ '^(nvidia|mlx|ib_|rdma|drm|i2c|x86_pkg)'
AND MTime > now() - 86400 * 7
SELECT
hostname() AS Hostname,
kernel.Release AS KernelRelease,
cpu_model.Model AS CPUModel,
iff(condition=cpu_model.Model =~ 'EPYC 7|Ryzen [34]|AMD Ryzen Threadripper 3',
then='REVIEW — potential Zen 2, verify family 17h model 31h-7Fh',
else='Not Zen 2 pattern') AS Zen2Exposure,
suspicious_modules.Name AS RecentModule,
suspicious_modules.MTime AS ModuleMTime
FROM scope()
Deploy as a fleet hunt. Sort by Zen2Exposure = 'REVIEW' and cross-reference KernelRelease against the patched versions listed in the USN-8664-1 advisory. Note: Zen 2 identification by marketing name is heuristic — for authoritative exposure assessment, check family/model/stepping from /proc/cpuinfo (family 23 / 0x17, models 0x31–0x7F for Zen 2 client; EPYC Rome is family 0x17 model 0x31 range — confirm against AMD's specification for your exact SKU).
Remediation & Verification Script (Bash)
The following script inventories exposure and applies the USN-8664-1 update on NVIDIA BaseOS / Ubuntu systems. Test in staging first — on DGX systems, a kernel update triggers DKMS rebuilds of NVIDIA GPU and Mellanox OFED drivers; verify rebuild success before rebooting production nodes.
#!/usr/bin/env bash
# USN-8664-1 / CVE-2025-54518 remediation & verification — NVIDIA BaseOS / Ubuntu
# Run as root. Test in staging; kernel updates require a reboot.
set -euo pipefail
echo "=== [1/6] CPU exposure assessment (Zen 2 detection) ==="
CPU_MODEL=$(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2- | xargs)
CPU_FAMILY=$(grep -m1 '^cpu family' /proc/cpuinfo | awk '{print $4}')
CPU_MODELNUM=$(grep -m1 '^model' /proc/cpuinfo | awk '{print $3}')
echo "CPU: ${CPU_MODEL} (family ${CPU_FAMILY}, model ${CPU_MODELNUM})"
if [ "${CPU_FAMILY}" = "23" ]; then
echo "[!] AMD Family 17h detected — potential Zen 2. Confirm SKU against AMD spec; treat as EXPOSED to CVE-2025-54518."
else
echo "[*] Not AMD Family 17h — CVE-2025-54518 CPU erratum likely N/A, but kernel subsystem fixes still apply."
fi
echo "=== [2/6] Current kernel ==="
uname -r
echo "Compare against patched versions at: https://ubuntu.com/security/notices/USN-8664-1"
echo "=== [3/6] Refresh package metadata and apply kernel updates ==="
apt-get update
apt-get install -y --only-upgrade linux-image-generic linux-headers-generic 2>/dev/null || \
apt-get dist-upgrade -y
echo "=== [4/6] Verify DKMS rebuilds (NVIDIA GPU / Mellanox OFED on DGX nodes) ==="
if command -v dkms >/dev/null 2>&1; then
dkms status || true
if dkms status | grep -Ev 'installed' | grep -q .; then
echo "[!] WARNING: DKMS modules not in 'installed' state — resolve BEFORE reboot or GPU/IB stack will fail."
fi
fi
echo "=== [5/6] Pending-reboot check ==="
if [ -f /var/run/reboot-required ]; then
echo "[!] REBOOT REQUIRED. Schedule maintenance: unpatched kernel is still running until reboot."
cat /var/run/reboot-required.pkgs 2>/dev/null || true
fi
echo "=== [6/6] Post-reboot verification commands (run after reboot) ==="
cat <<'EOF'
uname -r # confirm new kernel is running
ubuntu-security-status | head -20 # or: pro security-status
dkms status # all modules 'installed'
nvidia-smi # GPU stack healthy
dmesg | grep -iE 'taint|spectre|retbleed' # review mitigation state
EOF
Remediation
- Apply USN-8664-1 immediately on all NVIDIA BaseOS (DGX) and derivative Ubuntu systems. Use
sudo apt update && sudo apt dist-upgradeand confirm the installed kernel matches the fixed versions enumerated in the official advisory. There is no configuration workaround for a CPU op cache isolation erratum — the fix is the patched kernel (with any accompanying microcode delivered viaamd64-microcode); check that package is installed and current on Zen 2 hosts. - Reboot is mandatory. A local LPE primitive cannot be mitigated by restarting services. Prioritize reboot windows for multi-tenant GPU clusters, bastion hosts, and any node reachable by untrusted code (CI runners, JupyterHub/ML platform tenants, container hosts).
- On DGX systems, validate the driver stack post-reboot: DKMS rebuilds for NVIDIA GPU and Mellanox OFED must complete successfully (
dkms status,nvidia-smi,ibstat). A failed rebuild after a security update is the classic cause of "we rolled back the kernel" — which silently re-exposes you. Fix DKMS, never roll back. - Reduce the blast radius until patching completes:
- Restrict unprivileged user namespaces on single-tenant nodes that don't need rootless containers:
sysctl -w kernel.unprivileged_userns_clone=0(note: this will break podman/bubblewrap workloads — test first). - Enforce
kernel.modules_disabled=1on hardened nodes after boot, if operational constraints allow. - Limit interactive shell access on GPU compute nodes to named administrators; audit
sudopolicies.
- Restrict unprivileged user namespaces on single-tenant nodes that don't need rootless containers:
- Multi-tenant / co-residency review: any environment where untrusted workloads share Zen 2 hardware — containers, VMs, batch jobs — carries elevated risk from this class of flaw. Accelerate patching there first, and review tenant isolation assumptions.
- Track for KEV addition and update your vuln management SLA accordingly. Local-to-kernel flaws on shared compute infrastructure belong in your expedited patch tier (7-day or better), not your standard 30-day cycle.
No CISA deadline currently applies, but don't mistake that for low urgency — the absence of confirmed exploitation is a patch window, not a safety margin.
Final Assessment
USN-8664-1 combines a genuine hardware-class privilege escalation primitive (CVE-2025-54518 on Zen 2) with a broad set of kernel subsystem fixes on the platform that runs a significant share of the world's AI training infrastructure. The exploitation prerequisites (local code execution) are exactly what post-compromise attackers, malicious tenants, and supply-chain-implanted code already have. Patch the kernel, verify the driver stack survives, hunt for LPE precursors in the interim, and treat any correlated namespace-plus-module-load activity on a GPU node as a high-priority incident.
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.