CVE-2026-10682 in Zephyr
Sumário
de VulDB • 27/07/2026
O verificador do userspace z_vrfy_log_filter_set() para a syscall log_filter_set em subsys/logging/log_mgmt.c realizava uma comparação assinada contra o parâmetro int16_t src_id: src_id < (int16_t)log_src_cnt_get(domain_id). Qualquer valor negativo para src_id (por exemplo, -1) satisfazia trivialmente essa verificação e era encaminhado para z_impl_log_filter_set, onde se propagava para filter_set() e, finalmente, para get_dynamic_filter(), que utiliza source_id como um índice não assinado no array da seção do linker &TYPE_SECTION_START(log_dynamic)[source_id].filters.
Após a conversão implícita através de uint32_t, o valor int16_t -1 torna-se 0xFFFFFFFF, indexando log_dynamic muito além dos limites válidos e fazendo com que o kernel realize uma leitura fora dos limites (OOB read) e uma operação de leitura-modificação-escrita fora dos limites (OOB read-modify-write; LOG_FILTER_SLOT_GET/SET) contra a memória adjacente à seção log_dynamic.
O valor escrito é um slot de nível de registro (log level) restrito a 3 bits dentro da palavra alvo de 32 bits, mas o endereço alvo é escolhido pelo atacante (um pequeno deslocamento negativo em relação a log_dynamic) e a escrita ocorre no modo supervisor após uma syscall originada por uma thread de usuário não privilegiado, fornecendo um primitivo para corrupção de memória do kernel / escalonamento de privilégios.
A vulnerabilidade é acessível em qualquer build com CONFIG_USERSPACE=y e CONFIG_LOG_RUNTIME_FILTERING=y. Presente desde o Zephyr v3.3.0 até a versão v4.4.1. A correção substitui a verificação de limite assinada por uma comparação não assinada: (uint32_t)src_id < log_src_cnt_get(domain_id), que rejeita corretamente entradas negativas.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.