CVE-2026-16514 in Zephyrinformación

Resumen

por VulDB • 2026-09-18

gptp_mi_qualify_announce() en subsys/net/l2/ethernet/gptp/gptp_mi.c recorre el TLV de Path Trace de un mensaje Announce IEEE 802.1AS recibido, comparando cada identidad del reloj con la local. El límite del bucle se tomó únicamente del campo announce->steps_removed controlado por el atacante (aceptado hasta 254), y nunca de announce->tlv.len, que es el campo que indica cuántas identidades transporta realmente el TLV. Dado que path_sequence es el miembro flexible del TLV en la estructura wire (struct gptp_path_trace_tlv) y GPTP_ANNOUNCE() devuelve un puntero crudo al búfer de paquete recibido, memcmp() dentro del bucle puede acceder a memoria muy más allá del final del marco recibido.

La única validación de longitud de la pila, GPTP_ANNOUNCE_CHECK_LEN(), requiere que el payload gPTP recibido tenga exactamente 68 + tlv.len bytes; por lo tanto, no restringe el bucle, sino que garantiza la ausencia de datos adicionales. Un atacante no autenticado en el mismo segmento Ethernet puede enviar un único marco Announce declarando tlv.len = 0 con steps_removed = 254; el marco supera la verificación de longitud y la ruta de recepción (net_gptp_recv() → gptp_handle_msg() → gptp_mi_qualify_announce()), que no realiza autenticación, y el bucle lee entonces 255 entradas de 8 bytes cada una —aproximadamente 2 KB— más allá del final del búfer de red.

El impacto es una lectura fuera de límites (out-of-bounds read). Los bytes leídos se utilizan únicamente como operando para memcmp() y nunca se devuelven al atacante, por lo que no hay divulgación significativa de información; el riesgo práctico radica en que la sobrelectura cruza un límite del pool de búferes de red hacia memoria sin mapear o protegida por MPU (Memory Protection Unit), provocando una falla en el hilo RX de networking y causando una denegación de servicio. La exposición se limita a compilaciones que habilitan CONFIG_NET_GPTP optativo y experimental (implementaciones TSN/AVB) y a atacantes con adyacencia en la capa 2, ya que los marcos gPTP se envían a una dirección multicast link-local y no son enrutables.

La corrección calcula el recuento real de entradas como tlv.len / GPTP_CLOCK_ID_LEN y rechaza el anuncio cuando steps_removed + 1 lo excede, por lo que el bucle ya no puede ejecutarse más allá de los datos que la verificación de longitud del paquete demostró presentes.

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

Responsable

Zephyr

Reservar

2026-07-21

Divulgación

2026-09-18

Moderación

aceptado

Artículo

VDB-407526

CPE

listo

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!