PT-2026-114192 · Zephyrproject · Zephyr

CVE-2026-19673

·

Publicado

2026-10-14

·

Atualizado

2026-10-14

CVSS v3.1

7.1

Alta

VetorAV:A/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H
ethernet recv() in subsys/net/l2/ethernet/ethernet.c validates only that the first net buf of a received frame holds a plain 14-byte struct net eth hdr. When the ethertype is 0x8100 and VLAN is enabled on the interface, the same buffer is reinterpreted as the 18-byte struct net eth vlan hdr without re-checking the length: the VLAN TCI and the inner ethertype are read from offsets 14..17, past pkt->buffer->len, and hdr len is raised to 18 so the subsequent net buf pull() removes more bytes than the buffer holds.
A single unauthenticated frame of 14 to 17 bytes carrying the VLAN ethertype triggers this. No knowledge of the node's VLAN configuration is needed: net eth get vlan iface() returns the base interface for the priority tag 0, and a broadcast destination address satisfies the "frame is for me" test, so a 16-byte broadcast frame with ethertype 0x8100 and TCI 0x0000 reaches the pull. Nothing in the receive path enforces the 60-byte Ethernet minimum — the USB CDC ECM and CDC NCM gadget classes in particular hand host-supplied frames of any non-zero length straight to net recv data().
With assertions enabled, net buf simple pull() asserts and the node panics. In a production build (assertions and CONFIG NET BUF HARDENING off) the uint16 t buffer length underflows to 65534 and buf->data is advanced past the end of the fragment's storage, so every later parser reads far outside the buffer and any net buf add() on that fragment computes tailroom from the underflowed length. The result is a reliable remote denial of service and out-of-bounds access with information-disclosure and corruption potential.
Only configurations built with CONFIG NET VLAN=y that have a VLAN enabled on the receiving Ethernet interface, and whose MAC does not strip VLAN tags in hardware (ETHERNET HW VLAN TAG STRIP), are affected. The fix rejects the frame before the tag is read, so hdr len is thereafter either 14 or 18 with both sizes validated against pkt->buffer->len.

Correção

Out of bounds Read

Encontrou algum problema na descrição? Tem algo a acrescentar? Fique à vontade para nos escrever 👾

Enumeração de Fraquezas

Identificadores relacionados

CVE-2026-19673

Produtos afetados

Zephyr