CVE-2026-23448 Overview
CVE-2026-23448 is an out-of-bounds read vulnerability in the Linux kernel's cdc_ncm (Communication Device Class Network Control Model) USB driver. The flaw exists in the cdc_ncm_rx_verify_ndp16() function, which incorrectly validates Network Data Pointer (NDP) header boundaries, allowing memory access beyond the allocated socket buffer (skb) when processing malformed USB network packets.
The vulnerability occurs because the bounds check for NDP16 Data Pointer Entries (DPE) fails to account for the ndpoffset value. When an NDP is positioned near the end of a Network Transfer Block (NTB) with a large wNdpIndex, the DPE entries can extend past the skb data buffer while still passing the flawed validation check.
Critical Impact
An attacker with physical access to a USB port or the ability to emulate USB devices could craft malicious NTB packets to trigger out-of-bounds memory reads, potentially leading to information disclosure or system instability.
Affected Products
- Linux kernel (versions with the vulnerable cdc_ncm driver)
- Systems using USB CDC NCM network adapters
- Embedded devices with USB network connectivity
Discovery Timeline
- 2026-04-03 - CVE CVE-2026-23448 published to NVD
- 2026-04-07 - Last updated in NVD database
Technical Details for CVE-2026-23448
Vulnerability Analysis
The vulnerability resides in the cdc_ncm_rx_verify_ndp16() function within the Linux kernel's USB CDC NCM driver. This driver is responsible for handling USB network devices that implement the NCM specification, commonly used for high-speed USB Ethernet adapters and mobile broadband devices.
The CDC NCM protocol uses Network Transfer Blocks (NTB) containing Network Data Pointer (NDP) structures to describe the layout of network datagrams. Each NDP16 structure contains a header followed by an array of Data Pointer Entry (DPE) structures that point to individual datagrams within the NTB.
The function performs two critical bounds checks to ensure the NDP structure fits within the received skb buffer. The first check correctly validates that the NDP header fits within the buffer by adding ndpoffset to the structure size. However, the second check—which validates that the DPE array also fits—incorrectly omits ndpoffset, calculating the required space as if the NDP were located at offset zero.
This discrepancy allows a carefully crafted NTB with a high wNdpIndex value (placing the NDP near the end of the buffer) to pass validation even when its DPE entries extend beyond the allocated memory. When cdc_ncm_rx_fixup() subsequently iterates through the DPE array, it reads from out-of-bounds memory locations.
Root Cause
The root cause is a missing offset addition in the bounds validation logic within cdc_ncm_rx_verify_ndp16(). The flawed check calculates the required buffer size for the NDP structure plus DPE array without including ndpoffset, failing to account for where the NDP is actually positioned within the NTB.
Specifically, the problematic code validates:
sizeof(struct usb_cdc_ncm_ndp16) + ret * sizeof(struct usb_cdc_ncm_dpe16) > skb_in->len
When it should validate:
ndpoffset + sizeof(struct usb_cdc_ncm_ndp16) + ret * sizeof(struct usb_cdc_ncm_dpe16) > skb_in->len
Attack Vector
Exploitation of this vulnerability requires the ability to send crafted USB packets to a vulnerable system. This can be achieved through:
Physical USB Access: An attacker with physical access can connect a malicious USB device that emulates a CDC NCM network adapter and sends specially crafted NTB packets.
Compromised USB Peripheral: A previously trusted USB device that has been modified or compromised to send malicious packets.
USB Gadget Mode: On systems that support USB device/gadget mode, a connected host could potentially send malicious packets to the target device.
The attack involves crafting an NTB with a large wNdpIndex value that positions the NDP structure near the end of the legitimate buffer, with DPE entries designed to extend beyond the buffer boundary. When the kernel processes this packet, the out-of-bounds read occurs during DPE array iteration.
Detection Methods for CVE-2026-23448
Indicators of Compromise
- Kernel log messages indicating USB subsystem errors or memory access violations
- Unexpected kernel panics or system instability when USB network devices are connected
- Anomalous USB device enumeration patterns in system logs
- Memory corruption indicators in kernel diagnostic output
Detection Strategies
- Monitor kernel logs for CDC NCM driver errors using dmesg filtering for cdc_ncm messages
- Deploy kernel memory sanitizers (KASAN) in development/testing environments to detect out-of-bounds accesses
- Implement USB device allowlisting to restrict connections to known trusted devices
- Use USB traffic analysis tools to identify malformed NTB packets with suspicious wNdpIndex values
Monitoring Recommendations
- Enable kernel audit logging for USB device connection events
- Monitor for unusual USB device VID/PID combinations that could indicate emulated malicious devices
- Implement centralized logging for kernel messages related to network subsystem errors
- Consider deploying endpoint detection solutions that monitor kernel-level activity for anomalous behavior
How to Mitigate CVE-2026-23448
Immediate Actions Required
- Update to a patched Linux kernel version that includes the fix for CVE-2026-23448
- Restrict physical access to USB ports on critical systems
- Disable or unload the cdc_ncm kernel module if USB NCM network devices are not required
- Implement USB device authorization policies to prevent unauthorized device connections
Patch Information
The Linux kernel maintainers have released patches that correct the bounds checking logic in cdc_ncm_rx_verify_ndp16(). The fix adds ndpoffset to the nframes bounds check and uses struct_size_t() to express the NDP-plus-DPE-array size more clearly.
Multiple commits have been applied across stable kernel branches:
- Kernel Git Commit 2aa8a4f
- Kernel Git Commit 403f94d
- Kernel Git Commit 789204f
- Kernel Git Commit dce9dda
- Kernel Git Commit f1c7701
Organizations should apply these patches by updating to the latest stable kernel release for their distribution.
Workarounds
- Blacklist the cdc_ncm module to prevent it from loading automatically
- Implement USB port physical security controls in high-security environments
- Use USBGuard or similar tools to implement device authorization policies
- Disable USB autoprobing for network class devices via kernel boot parameters
# Configuration example
# Blacklist the cdc_ncm module to disable vulnerable driver
echo "blacklist cdc_ncm" | sudo tee /etc/modprobe.d/blacklist-cdc_ncm.conf
# Unload the module if currently loaded
sudo modprobe -r cdc_ncm
# Verify module is not loaded
lsmod | grep cdc_ncm
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


