CVE-2026-12052 is a buffer overflow in the CDC NCM USB class handler within Zephyr's device_next stack. A wLength value of 1 triggers an allocation of exactly 1 byte, and a subsequent memcpy writes beyond those bounds into adjacent net_buf metadata in the udc_ep_pool — the shared pool that all USB endpoints draw from. This is not a typical heap overflow. The corruption hits the structural integrity of the USB stack itself: subsequent allocations return corrupted buffers, deallocations corrupt free lists, and all endpoints become unstable. The denial-of-service is guaranteed; whether worse is achievable depends on whether an attacker can predict or influence pool layout through descriptor enumeration timing or endpoint selection patterns.
The CVSS 5.2 score materially underweights this. It scores the overflow as an isolated memory-corruption event, but the failure mode is systemic stack instability across every USB endpoint. CVSS has no vocabulary for architectural exposure patterns, and organizations will deprioritize this based on the number when the actual scope is architectural.
The fix — adding MIN(sizeof(cdc_ncm_ntb_params), setup->wLength) — mirrors the CDC ACM patch from 2022. That this pattern was already known and applied to a sibling handler, yet CDC NCM shipped vulnerable for years, is the uncomfortable part. The one-liner fix does not mean the vulnerability is trivial; it means the vulnerability class is trivial, which is the damning observation. Future class handlers in device_next will depend on individual developer vigilance to avoid the same flaw unless the framework API contract is hardened.
Check your deployed Zephyr images: if CDC NCM is enabled with device_next, this is present. Static analysis tools that treat __ASSERT_NO_MSG as testing-only guards will miss this — configure them to recognize assertion-based bounds checking as insufficient for untrusted input paths. Beyond patching, the priority is understanding whether other USB class handlers in your codebase share this exact-fit allocation pattern and lack the MIN() clamp.