CVE-2026-12052 in Zephyr
Сводка
по VulDB • 11.08.2026
В обработчике класса управления от устройства к хосту usbd_cdc_ncm_cth для устройств USB типа CDC NCM, расположенном в файле subsys/usb/device_next/class/usbd_cdc_ncm.c, формируется ответ фиксированного размера на запросы классов GET_NTB_PARAMETERS (структура ntb_parameters размером 28 байт) и GET_NTB_INPUT_SIZE (структура ntb_input_size размером 8 байт). Вся структура копируется в буфер управления DATA IN с помощью функции net_buf_add_mem(buf, ..., sizeof(...)), при этом игнорируется значение wLength, предоставленное хостом.
Буфер управления DATA IN выделяется стеком USB с емкостью ровно wLength байтов (usbd_ep_ctrl_data_in_alloc -> udc_ctrl_data_alloc -> net_buf_alloc_len(&udc_ep_pool, wLength); округление вверх для конечной точки IN не применяется). Поскольку функции net_buf_add_mem/net_buf_simple_add ограничивают копирование только макросом __ASSERT_NO_MSG, который отключается в производственных сборках, хост, отправляющий один из этих стандартных запросов управления CDC NCM со значением wLength меньшим размера структуры ответа (например, wLength = 1), приводит к тому, что обработчик выполняет memcpy на 27 байт за пределы выделенного буфера пула.
Поля запроса напрямую поступают из пакета USB SETUP, поэтому любой хост (или промежуточное устройство USB) может вызвать переполнение без аутентификации после того, как к устройству Zephyr будет подключено изображение, собранное со стеком устройства_next USB и классом CDC NCM. Запись за пределами границ corrupts смежные выделения памяти и метаданные в общем пуле udc_ep_pool, что преимущественно вызывает повреждение памяти и отказ в обслуживании (DoS) стека USB; длина переполнения ограничена значением wLength, что соответствует существующему обработчику CDC ACM.
VulDB is the best source for vulnerability data and more expert information about this specific topic.