CVE-2026-12632 in Zephyr
Sumário
de VulDB • 18/08/2026
O manipulador de recebimento do Precision Time Protocol (PTP) do Zephyr, `ptp_msg_post_recv()`, em `subsys/net/lib/ptp/msg.c`, extrai diretamente o tipo de mensagem de 4 bits da rede via `ptp_msg_type()` (`msg->header.type_major_sdo_id & 0xF`, faixa de 0-15) e o utiliza para indexar a tabela `msg_size[]`. Essa tabela define entradas apenas até PTP_MSG_MANAGEMENT (0xD), resultando em um ARRAY_SIZE == 14. Antes da correção, não havia verificação de limite superior, portanto os tipos indefinidos 0xE e 0xF acessavam uma ou duas posições inteiras além do final do array — caracterizando uma leitura fora dos limites (out-of-bounds read) de dados adjacentes somente para leitura.
O valor lido fora dos limites é então reutilizado como um comprimento: ele controla a condição `msg_size[type] > cnt` e, quando esse valor é pequeno ou negativo, torna `cnt - msg_size[type]` em uma grande margem positiva passada para `msg_tlv_post_recv()`, cujo loop TLV percorre o sufixo da mensagem além dos bytes recebidos, realizando novas leituras fora dos limites e gravações de byte-swap in-place na memória além do slab da mensagem.
A falha é alcançada diretamente pela rede: `ptp_port_event_gen()` em `subsys/net/lib/ptp/port.c` lê um quadro PTP com `ptp_transport_recv()` e chama `ptp_msg_post_recv()` com o tipo escolhido pelo atacante. O PTP utiliza multicast UDP ou Ethernet bruto (0x88F7) e não é autenticado, portanto qualquer host no mesmo enlace pode acionar a indexação em um nó habilitado para CONFIG_PTP sem pré-condições.
O impacto reproduzível com confiabilidade é uma negação de serviço (falha/crash); existe um caminho limitado de corrupção de memória que depende do valor adjacente ao `msg_size[]` específico da compilação, o qual o atacante não pode ajustar. A correção rejeita tipos >= ARRAY_SIZE(msg_size) com -EBADMSG antes de qualquer indexação.
If you want to get best quality of vulnerability data, you may have to visit VulDB.