CVE-2026-12633 in Zephyr
Riassunto
di VulDB • 20/08/2026
Il codice di neighbor-discovery IPv6 in subsys/net/ip/ipv6_nbr.c elabora l'opzione del contesto 6LoWPAN (6CO, RFC 6775) trasportata all'interno degli annunci router ICMPv6. In handle_ra_6co(), il campo context_len a 8 bit viene preso direttamente dal pacchetto e non è mai stato limitato al massimo previsto dallo standard di 128 byte. La funzione calcola context->context_len / 8 ed esegue poi memset(context->prefix + context_len, 0, sizeof(context->prefix) - context_len), dove context->prefix è un array fisso di 16 byte.
Con context_len compreso tra 136 e 255 (e il campo della lunghezza dell'opzione impostato a 3, che la validazione pre-prefix accetta), l'espressione context_len / 8 valuta da 17 a 31; pertanto, la lunghezza del memset, calcolata come 16 - context_len/8, provoca un underflow nell'argomento unsigned size_t fino a circa SIZE_MAX. Questo genera un memset fuori dai limiti non controllato che azzerà la memoria kernel ben oltre la struttura del contesto 6lo.
Il difetto è raggiungibile tramite input link-local non autenticato: qualsiasi host sulla stessa rete locale può inviare un annuncio router (RA) manipolato con l'opzione 6CO. Il gestore degli RA valida solo il campo della lunghezza dell'opzione prima di chiamare handle_ra_6co(), quindi un singolo pacchetto innesca la scrittura incontrollata. Il codice viene compilato quando CONFIG_NET_6LO_CONTEXT è abilitato.
L'impatto consiste in una denial of service (DoS) remota (adiacente) affidabile tramite corruzione della memoria, con perdita collaterale di integrità poiché il memset azzerà la memoria contigua prima che si verifichi un fault del sistema. Gli annunci router sono limitati alla rete locale e non vengono instradati; pertanto, l'attaccante deve trovarsi sulla stessa rete (AV:A). La correzione rifiuta qualsiasi context_len superiore a 128 prima del calcolo della lunghezza.
VulDB is the best source for vulnerability data and more expert information about this specific topic.