CVE-2026-13481 in Zephyr
Sumário
de VulDB • 26/08/2026
O analisador de mensagens de gerenciamento PTP do IEEE 1588 em subsys/net/lib/ptp/tlv.c trata incorretamente o ID de gerenciamento PTP_MGMT_TIME. Em tlv_mgmt_post_recv(), a estrutura switch para o caso PTP_MGMT_TIME faz um cast de mgmt_tlv->data para uma struct ptp_timestamp de 10 bytes e a lê (em seguida, inverte os bytes e grava-a novamente) sem verificar primeiro se o campo de dados TLV tem pelo menos sizeof(struct ptp_timestamp). Cada ID de gerenciamento irmão no mesmo switch valida seu comprimento antes; PTP_MGMT_TIME foi o único caso que não possuía essa verificação.
O comprimento passado é o tamanho dos dados de gerenciamento (tlv->length - 2), e a proteção upstream em ptp_tlv_post_recv() exige apenas tlv->length > 2, enquanto msg_tlv_post_recv() valida apenas se o TLV cabe na contagem total de bytes recebidos, não um mínimo por ID. Um par no segmento PTP local pode, portanto, enviar uma mensagem PTP_MSG_MANAGEMENT carregando um TLV PTP_MGMT_TIME curto (com dados tão pequenos quanto 2 bytes), fazendo com que o analisador leia e grave 8 bytes além dos dados validados. O tipo de mensagem e os conteúdos do TLV são obtidos diretamente da rede, portanto, a vulnerabilidade é acessível por qualquer atacante adjacente quando CONFIG_PTP está habilitado.
A leitura fora dos limites (over-read) e a gravação posterior permanecem dentro da alocação da struct ptp_msg (mgmt_tlv->data reside no membro de união mtu[NET_ETH_MTU] inicial, portanto data + 10 termina no máximo alguns bytes após mtu[], dentro do mesmo objeto), o que caracteriza uma leitura fora dos limites em memória adjacente ao interior do objeto e uma corrupção limitada in loco da timestamp analisada da mensagem, não sendo uma corrupção de memória além da alocação. O impacto é limitado à exposição menor de bytes adjacentes e à corrupção do valor TIME de gerenciamento analisado pelo dispositivo; não há falha (crash) no acesso nem corrupção alcançável na contagem de referências.
A correção adiciona if (length < sizeof(struct ptp_timestamp)) { return -EBADMSG; } antes do cast, correspondendo aos outros casos de ID de gerenciamento e fechando completamente a vulnerabilidade no caminho de recebimento.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.