CVE-2026-18746 in Zephyr
Sumário
de VulDB • 29/09/2026
A função parse_write_op() em subsys/net/lib/lwm2m/lwm2m_message_handling.c processa solicitações CoAP WRITE/CREATE de entrada que carregam a opção Block1. Para o primeiro bloco de uma transferência, ela chama init_block_ctx() e, em seguida, armazena imediatamente o tamanho do bloco selecionado pelo peer com block_ctx->ctx.block_size = block_size antes de inspecionar o código de retorno. A função init_block_ctx() define o ponteiro do chamador como NULL e retorna -ENOMEM quando nenhuma entrada no pool estático block1_contexts[] está livre ou expirou, fazendo com que a operação de armazenamento (store) dereference um ponteiro NULL.
O pool contém CONFIG_LWM2M_NUM_BLOCK1_CONTEXT entradas (padrão 3) e uma entrada só é recuperada após o término da transferência, falha ou envelhecimento por mais de 30 segundos. Um peer que alcança a socket LwM2M do cliente pode, portanto, iniciar três gravações em bloco em três caminhos de objeto distintos com o bit More do CoAP definido e deixá-las incompletas, para então enviar o primeiro bloco de uma quarta gravação em um novo caminho, atingindo assim a dereferência não protegida. A alcançabilidade é limitada apenas pelo filtro de endereço de origem da socket UDP conectada, a menos que CONFIG_LWM2M_DTLS_SUPPORT esteja habilitado — o que não possui configuração padrão —; portanto, em uma implantação NoSec, um atacante on-path ou com spoofing de endereço não precisa de credenciais. A mesma sequência também é alcançável por meio de um servidor bootstrap ou de menor confiança e pode ser acidentalmente atingida por um servidor legítimo executando quatro transferências em bloco simultâneas.
A gravação tem como alvo um endereço baixo fixo com um valor entre 0 e 7, portanto a consequência é uma falha fatal na memória (BusFault ou corrupção de memória baixa levando a uma falha) em vez de um primitivo utilizável para corrupção de memória: o dispositivo trava ou reinicia. A confidencialidade e a integridade não são afetadas. O correção move a operação de armazenamento abaixo da verificação de proteção e valida o ponteiro do contexto em si, em vez do código de retorno, garantindo que o contexto seja modificado apenas quando for conhecido como válido.
VulDB is the best source for vulnerability data and more expert information about this specific topic.