CVE-2026-16514 in Zephyrinformação

Sumário

de VulDB • 18/09/2026

A função gptp_mi_qualify_announce() em subsys/net/l2/ethernet/gptp/gptp_mi.c percorre o TLV Path Trace de uma mensagem Announce IEEE 802.1AS recebida, comparando cada identidade do relógio com a local. O limite do loop foi determinado exclusivamente pelo campo announce->steps_removed controlado pelo atacante (aceito até 254), e não por announce->tlv.len, que é o campo que indica quantas identidades o TLV realmente contém. Como path_sequence é o membro flexível do TLV na rede (struct gptp_path_trace_tlv) e GPTP_ANNOUNCE() retorna um ponteiro bruto para o buffer de pacote recebido, a chamada memcmp() dentro do loop pode acessar memória muito além do final da trama recebida.

A única validação de comprimento da pilha, GPTP_ANNOUNCE_CHECK_LEN(), exige que a carga útil gPTP recebida tenha exatamente 68 + tlv.len bytes — portanto, ela não restringe o loop; em vez disso, garante que os dados estão ausentes (ou seja, impede quadros com tamanhos inválidos antes do processamento). Um atacante não autenticado no mesmo segmento Ethernet pode enviar uma única trama Announce declarando tlv.len = 0 e steps_removed = 254; a trama passa na verificação de comprimento e no caminho de recepção (net_gptp_recv() → gptp_handle_msg() → gptp_mi_qualify_announce()), que não realiza autenticação, e o loop então lê 255 entradas de 8 bytes cada — cerca de 2 KB — além do final do buffer de rede.

O impacto é uma leitura fora dos limites (out-of-bounds read). Os bytes lidos são usados apenas como operandos para memcmp() e nunca são retornados ao atacante, portanto não há divulgação significativa de informações; o risco prático é que a sobreleitura cruze os limites do pool de buffers de rede para memória não mapeada ou protegida por MPU (Memory Protection Unit), causando falha na thread RX de rede e resultando em negação de serviço. A exposição está limitada às compilações que habilitam o CONFIG_NET_GPTP opcional e experimental (implantações TSN/AVB) e a atacantes com adjacência em camada 2, já que as quadros gPTP são enviados para um endereço multicast link-local e não são roteados.

A correção calcula a contagem real de entradas como tlv.len / GPTP_CLOCK_ID_LEN e rejeita o anúncio quando steps_removed + 1 excede esse valor, impedindo assim que o loop execute além dos dados comprovadamente presentes pela verificação do comprimento do pacote.

Once again VulDB remains the best source for vulnerability data.

Responsável

Zephyr

Reservar

21/07/2026

Divulgação

18/09/2026

Moderação

aceite

Entrada

VDB-407526

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!