CVE-2026-18415 in Zephyrinformazioni

Riassunto

di VulDB • 28/09/2026

ieee802154_send() in subsys/net/l2/ieee802154/ieee802154.c copia il pacchetto in uscita in un buffer di trasmissione fisso e singolo da 125 byte (tx_frame_buf_pool, dimensionato come IEEE802154_MTU). Nelle build con CONFIG_NET_L2_IEEE802154_FRAGMENT abilitata (impostazione predefinita quando è impostato CONFIG_NET_6LO), il ramo eseguito quando la frammentazione 6LoWPAN non è richiesta eseguiva una net_buf_add_mem(frame_buf, pkt_buf->data, pkt_buf->len) senza verifica. L'unica protezione era __ASSERT_NO_MSG() all'interno di net_buf_simple_add(), che viene compilata via in assenza di CONFIG_ASSERT; pertanto un pacchetto sovradimensionato superava silenziosamente il buffer del frame.

Il difetto non è raggiungibile dalla radio: per i pacchetti NET_AF_INET6, ieee802154_6lo_encode_pkt() confronta la lunghezza complessiva del pacchetto con IEEE802154_MTU e segue il percorso di frammentazione quando non si adatta, quindi ogni buffer copiato sul ramo senza frammentazione è entro i limiti. È invece raggiungibile tramite socket NET_AF_PACKET associati a un'interfaccia 802.15.4: per NET_SOCK_RAW il blocco 6LoWPAN viene saltato completamente e per NET_SOCK_DGRAM si esce precocemente in seguito al test del family, lasciando nessuna validazione della lunghezza su tutto il percorso di trasmissione (net_context_sendto() e net_if_tx() non applicano controlli e pkt_buffer_length() non limita l'allocazione per questo L2).

Un'applicazione — o, in una build CONFIG_USERSPACE, un thread di applicazione non privilegiato che utilizza le syscall zsock_socket()/zsock_sendto() — può quindi causare una scrittura fuori dai limiti (out-of-bounds) in modalità supervisor con byte scelti oltre il buffer del pool da 125 byte. Con la configurazione predefinita CONFIG_NET_BUF_FIXED_DATA_SIZE di 128 byte, l'overflow è limitato a circa ll_hdr_len + 3 byte; con CONFIG_NET_BUF_VARIABLE_DATA_SIZE un singolo buffer di archiviazione può essere grande quanto CONFIG_NET_PKT_BUF_TX_DATA_POOL_SIZE, rendendo l'overflow molto più ampio. La conseguenza è la corruzione della memoria adiacente al pool, con crash o ulteriore compromissione dello stato del kernel come impatto pratico.

La correzione valida ll_hdr_len + net_pkt_get_len(pkt) + authtag_len contro IEEE802154_MTU prima di qualsiasi copia e aggiunge un helper copy_pkt_to_frame() che verifica lo spazio disponibile (tailroom), restituendo -EMSGSIZE invece di superare il buffer. La stessa modifica linearizza anche l'intera catena net_buf in un unico frame MAC, quindi i confini dell'archiviazione dei pacchetti non diventano più confini del frame sul filo.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsabile

Zephyr

Prenotare

30/07/2026

Divulgazione

29/09/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Do you know our Splunk app?

Download it now for free!