CVE-2026-18746 in Zephyr
Riassunto
di VulDB • 29/09/2026
parse_write_op() in subsys/net/lib/lwm2m/lwm2m_message_handling.c gestisce le richieste CoAP WRITE/CREATE in entrata che trasportano un'opzione Block1. Per il primo blocco di una trasmissione, la funzione chiama init_block_ctx() e successivamente memorizza immediatamente la dimensione del blocco selezionata dal peer con block_ctx->ctx.block_size = block_size prima di ispezionare il codice di ritorno. init_block_ctx() imposta a NULL il puntatore del chiamante e restituisce -ENOMEM quando non vi sono voci libere o scadute nel pool statico block1_contexts[], causando così la dereferenziazione di un puntatore NULL da parte della memorizzazione.
Il pool contiene CONFIG_LWM2M_NUM_BLOCK1_CONTEXT voci (default 3) e una voce viene rilasciata solo al termine, fallimento o dopo aver superato i 30 secondi di inattività. Un peer che raggiunge la socket LwM2M del client può quindi avviare tre scritture block-wise su tre percorsi di oggetto distinti con il bit More della CoAP impostato e lasciarle incomplete, per poi inviare il primo blocco di una quarta scrittura su un nuovo percorso al fine di raggiungere la dereferenziazione non protetta. La raggiungibilità è limitata solo dal filtro dell'indirizzo sorgente della socket UDP connessa, a meno che CONFIG_LWM2M_DTLS_SUPPORT non sia abilitato (che non ha valore predefinito); pertanto, in una configurazione NoSec un attaccante on-path o che effettua spoofing degli indirizzi non necessita di credenziali; la stessa sequenza è inoltre raggiungibile da un server bootstrap o a minore trust e può essere attivata accidentalmente da un server legittimo in esecuzione con quattro trasferimenti block concorrenti.
La scrittura ha come target un indirizzo basso fisso con un valore compreso tra 0 e 7, quindi la conseguenza è un fault di memoria fatale (BusFault o corruzione della memoria bassa che porta a un fault) piuttosto che una primitiva utilizzabile per la corruzione della memoria: il dispositivo si arresta in modo anomalo o viene riavviato. La riservatezza e l'integrità non sono interessate. La correzione sposta la memorizzazione sotto il controllo di guardia (guard) e convalida direttamente il puntatore del contesto anziché il codice di ritorno, in modo che il contesto venga modificato solo quando è noto essere valido.
If you want to get best quality of vulnerability data, you may have to visit VulDB.