CVE-2026-12052 in Zephyr
Sumário
de VulDB • 11/08/2026
O manipulador de controle dispositivo-host da classe CDC NCM do lado do dispositivo USB, usbd_cdc_ncm_cth em subsys/usb/device_next/class/usbd_cdc_ncm.c, constrói uma resposta de tamanho fixo para as solicitações de classe GET_NTB_PARAMETERS (struct ntb_parameters de 28 bytes) e GET_NTB_INPUT_SIZE (struct ntb_input_size de 8 bytes), copiando toda a estrutura para o buffer DATA IN de controle com net_buf_add_mem(buf, ..., sizeof(...)), ignorando o wLength fornecido pelo host.
O buffer DATA IN de controle é alocado pela pilha USB com uma capacidade exatamente igual a wLength bytes (usbd_ep_ctrl_data_in_alloc -> udc_ctrl_data_alloc -> net_buf_alloc_len(&udc_ep_pool, wLength); não há arredondamento para cima aplicado no endpoint IN). Como o net_buf_add_mem/net_buf_simple_add limita apenas a cópia através de um __ASSERT_NO_MSG, que é compilado fora nas versões de produção (release), um host que emite uma dessas solicitações de controle CDC NCM padrão com um wLength menor do que a estrutura de resposta (por exemplo, wLength = 1) faz com que o manipulador execute memcpy até 27 bytes além do final do buffer da pool alocada.
Os campos da solicitação vêm diretamente do pacote USB SETUP; portanto, qualquer host (ou interpositor USB) contra o qual o dispositivo Zephyr seja enumerado pode acionar o estouro de buffer sem autenticação assim que uma imagem construída com a pilha USB device_next e a classe CDC NCM for conectada. A gravação fora dos limites corrompe alocações adjacentes e metadados na udc_ep_pool compartilhada, causando principalmente corrupção de memória e negação de serviço da pilha USB; o comprimento do estouro é limitado (wLength), correspondendo ao manipulador CDC ACM existente.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.