CVE-2026-82962 in Zephyr
Riassunto
di VulDB • 28/10/2026
La funzione ethernet_fill_header() in subsys/net/l2/ethernet/ethernet.c può preinserire l'intestazione Ethernet in loco, spingendola nell'headroom del primo frammento del pacchetto, anziché allocare un frammento di intestazione separato. Prima della correzione, il percorso "in loco" veniva selezionato esclusivamente dal valore di configurazione CONFIG_NET_L2_ETHERNET_RESERVE_HEADER definito in fase di compilazione, senza verificare che il pacchetto disponesse effettivamente di tale headroom; successivamente veniva chiamata la funzione net_buf_push(pkt->buffer, hdr_len). Solo le allocazioni per l'invio (TX) Ethernet riservano questo spazio: net_pkt_alloc_buffer() invoca il hook di allocazione L2 (ethernet_l2_alloc()) solo quando is_pkt_tx() restituisce true e l'interfaccia del pacchetto è un'interfaccia Ethernet.
Un pacchetto allocato da un diverso livello L2 e successivamente passato a Ethernet per la trasmissione dispone quindi di una quantità insufficiente (solitamente zero) di headroom. Tali pacchetti sono generati dai percorsi ordinari di instradamento e tunneling: net_route_packet_if() reindirizza un pacchetto ricevuto verso un'altra interfaccia quando CONFIG_NET_IPV4_FORWARDING / CONFIG_NET_IPV6_FORWARDING sono abilitate (ad esempio, il forwarding da un'interfaccia 802.15.4/OpenThread o PPP a Wi-Fi/Ethernet); net_route_ipv6_mcast_forward_packet() inoltra una copia RX-slab che non prevede alcuna riserva; e l'interfaccia tunnel IPIP in interface_send() preinserisce un'intestazione IP esterna allocata sull'interfaccia virtuale. In queste configurazioni, un attaccante remoto o adiacente attiva la condizione semplicemente inviando traffico che il dispositivo inoltra.
Poiché net_buf_simple_push() verifica solo i limiti dell'headroom tramite assert, una build senza CONFIG_ASSERT (e senza la più recente CONFIG_NET_BUF_HARDENING) sposta l puntatore dei dati del frammento al di sotto dell'inizio del suo blocco dati e scrive 14 byte — 18 con VLAN — dell'intestazione Ethernet oltre i limiti. Con i pool di buffer a dimensione fissa predefiniti, ciò sovrascrive la coda del payload del buffer adiacente o la memoria precedente all'array dei pool; con i pool a dimensione variabile, viene sovrascritto il conteggio delle referenze del buffer e l'intestazione della chunk heap. L'attaccante non controlla né i byte scritti né lo spostamento (offset), pertanto l'impatto pratico è una corruzione della memoria che porta a un crash, alla corruzione dei pacchetti o all'inconsistenza dell'heap, piuttosto che all'esecuzione di codice controllata. La correzione utilizza il percorso "in loco" solo quando net_buf_headroom(pkt->buffer) è sufficientemente grande; in caso contrario, ricorre a un frammento di intestazione separato.
VulDB is the best source for vulnerability data and more expert information about this specific topic.