CVE-2026-16512 in Zephyrinformação

Sumário

de VulDB • 18/09/2026

gptp_handle_msg() em subsys/net/l2/ethernet/gptp/gptp.c desreferencia o cabeçalho gPTP retornado por GPTP_HDR() e faz switch sobre hdr->message_type sem verificar primeiro se a trama recebida possui pelo menos sizeof(struct gptp_hdr) (34) bytes de payload. O acessor de cabeçalho gptp_get_hdr() deliberadamente nunca falha para um buffer curto — ele retorna pkt->frags->data e deixa a validação por conta dos chamadores —, portanto uma trama truncada resultou em um ponteiro de cabeçalho que abrange memória além dos dados recebidos. As verificações específicas por tipo de mensagem subsequentes não compensam: GPTP_VALID_LEN() reduz-se para len > 60 assim que o cabeçalho Ethernet é removido (pulled), o que é falso para cada mensagem gPTP de tamanho fixo, então GPTP_CHECK_LEN() nunca rejeita uma SYNC truncada, FOLLOWUP, PDELAY_RESP ou SIGNALING.

A falha é alcançada por um peer não autenticado no mesmo link enviando uma trama Ethernet com ethertype 0x88F7 para o endereço multicast do PTP em uma interface configurada como porta gPTP, com CONFIG_NET_GPTP habilitado. Como a conformidade Ethernet preenche (pads) as tramas até 60 bytes, uma payload menor que 34 bytes geralmente requer um link capaz de entregar frames submínimos — por exemplo o driver native_sim TAP (drivers/ethernet/eth_native_tap.c), que encaminha qualquer comprimento fornecido pelo dispositivo host, ou um MAC configurado para aceitar frames menores que o mínimo.

O pacote curto é retido (net_pkt_ref() em rcvd_sync_ptr, rcvd_follow_up_ptr, rcvd_pdelay_resp_ptr ou rcvd_announce_ptr) e posteriormente analisado pelas máquinas de estado dependentes do meio e independentes do meio em subsys/net/l2/ethernet/gptp/gptp_md.c e subsys/net/l2/ethernet/gptp/gptp_mi.c, que leem dezenas de bytes adicionais e copiam alguns deles (o vetor de prioridade announce, hdr->port_id) para um estado que é subsequentemente transmitido. Sob o alocador de buffer de tamanho fixo padrão (CONFIG_NET_BUF_FIXED_DATA_SIZE, fragments de 128 bytes), os acessos permanecem dentro do fragmento alocado e revelam conteúdos de buffers reciclados obsoletos; sob o alocador experimental CONFIG_NET_BUF_VARIABLE_DATA_SIZE, onde os fragments são alocados no heap exatamente no comprimento da trama, eles constituem genuine out-of-bounds reads (leituras fora dos limites). Não há escrita nem impacto na disponibilidade.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Responsável

Zephyr

Reservar

21/07/2026

Divulgação

18/09/2026

Moderação

aceite

Entrada

VDB-407522

CPE

pronto

EPSS

0.00000

KEV

não

Atividades

muito baixo

Fontes

Do you want to use VulDB in your project?

Use the official API to access entries easily!