CVE-2026-89743 Overview
CVE-2026-89743 is an out-of-bounds read vulnerability in the Linux kernel's Nitro Secure Module (NSM) misc driver. The flaw resides in nsm_sendrecv_msg_locked(), which stores the virtqueue used-ring length reported by the NSM device directly into msg->resp.len without validating it against the response buffer size. A malicious or malfunctioning virtio backend can report a length larger than the posted buffer. The parse_resp_raw() function then copies that many bytes from the fixed response buffer to user space, leaking adjacent kernel heap memory.
Critical Impact
A compromised or malicious NSM virtio backend can trigger disclosure of adjacent kernel heap memory to user space and destabilize the host, impacting confidentiality and availability of Linux guest workloads that expose the NSM device.
Affected Products
- Linux kernel misc/nsm driver (Nitro Secure Module) — versions prior to the fix commits
- Linux distributions shipping the affected kernel with NSM enabled (notably AWS Nitro Enclaves guest images)
- Downstream stable kernel trees pending backport of the referenced patches
Discovery Timeline
- 2026-09-11 - CVE-2026-89743 published to NVD
- 2026-09-13 - Last updated in NVD database
Technical Details for CVE-2026-89743
Vulnerability Analysis
The NSM driver exchanges CBOR-encoded messages with a host-side virtio backend over a virtqueue. When nsm_sendrecv_msg_locked() completes a request, it reads the used-ring length reported by the backend and assigns it to msg->resp.len. The response buffer itself is fixed in size and pre-allocated by the driver. The response path lacks a bounds check, while the request path in fill_req_raw() already clamps its length. This asymmetry allows a hostile backend to influence how many bytes parse_resp_raw() subsequently copies out of the response buffer.
Because the copy uses an attacker-influenced length larger than the underlying allocation, bytes beyond the buffer — residing in adjacent kernel heap — are transferred to user space. The impact is information disclosure of kernel memory contents, with potential secondary effects on kernel stability when copies cross slab boundaries.
Root Cause
The root cause is missing input validation on device-supplied metadata, an [CWE-125] out-of-bounds read pattern. The driver trusted the virtqueue used-ring length as authoritative and skipped a symmetric bound against the response buffer's capacity. Trust in a hardware or hypervisor-adjacent component was extended without defensive clamping.
Attack Vector
Exploitation requires a malicious or compromised virtio NSM backend paired with a vulnerable guest kernel. In the Nitro Enclaves model this typically means an attacker who controls the host-side device emulation or has subverted the backend. An unprivileged user-space process on the guest can then invoke NSM operations through the driver's character device and receive leaked kernel heap bytes in the response payload. The CVSS vector indicates local attack vector with no privileges or user interaction required, and high impact to confidentiality and availability.
No public proof-of-concept is available. Technical details are documented in the upstream fix commits 29e634a, 2aa0fb9, 339f19b, and 808e530, which clamp the stored length to the size of the response buffer.
Detection Methods for CVE-2026-89743
Indicators of Compromise
- Unexpected user-space reads of NSM responses containing non-CBOR or high-entropy trailing bytes that resemble kernel heap contents.
- Kernel log entries referencing the nsm driver alongside slab or KASAN out-of-bounds warnings on kernels built with memory sanitizers.
- Anomalous virtqueue activity from processes accessing /dev/nsm that do not correspond to legitimate enclave workloads.
Detection Strategies
- Audit which processes open and issue ioctls against /dev/nsm and baseline expected callers such as the Nitro Enclaves SDK.
- Enable KASAN on non-production kernels to surface out-of-bounds reads originating from parse_resp_raw() during testing.
- Compare running kernel versions against the fix commits and flag hosts still exposing the vulnerable code path.
Monitoring Recommendations
- Collect kernel ring buffer and auditd telemetry to a centralized store and alert on nsm-tagged warnings or panics.
- Track kernel package versions across the fleet and monitor for drift from the patched baseline provided by the distribution.
- Monitor virtio device configuration changes on hypervisors that expose NSM to guests.
How to Mitigate CVE-2026-89743
Immediate Actions Required
- Inventory Linux guests that load the nsm module, prioritizing AWS Nitro Enclaves hosts and any custom virtio-based enclave stacks.
- Apply the vendor kernel update that incorporates the upstream fix commits as soon as the distribution ships a patched build.
- Restrict access to /dev/nsm to trusted service accounts using standard filesystem permissions and Linux capabilities.
Patch Information
The fix clamps the device-reported response length to the size of the response buffer, restoring symmetry with the request path already implemented in fill_req_raw(). Upstream commits addressing the issue are 29e634a, 2aa0fb9, 339f19b, and 808e530. Well-behaved backends report no more than the posted buffer size, so the clamp does not affect conforming traffic.
Workarounds
- Unload the nsm module (modprobe -r nsm) on hosts that do not require Nitro Secure Module functionality.
- Blacklist the driver via /etc/modprobe.d/ on systems where NSM services are unused to prevent accidental loading.
- Limit which local users can open /dev/nsm through device permissions or a mandatory access control policy such as SELinux or AppArmor.
# Prevent the vulnerable driver from loading until a patched kernel is deployed
echo 'blacklist nsm' | sudo tee /etc/modprobe.d/blacklist-nsm.conf
sudo modprobe -r nsm 2>/dev/null || true
sudo update-initramfs -u
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.