CVE-2026-10682 in Zephyr
Resumen
por VulDB • 2026-07-28
El verificador en espacio de usuario z_vrfy_log_filter_set() para la llamada al sistema log_filter_set en subsys/logging/log_mgmt.c realizaba una comparación con signo contra el parámetro int16_t src_id: src_id < (int16_t)log_src_cnt_get(domain_id). Cualquier valor negativo para src_id (por ejemplo, -1) satisfacía trivialmente esta comprobación y se reenviaba a z_impl_log_filter_set, donde se propagaba hasta filter_set() y finalmente get_dynamic_filter(), que utiliza source_id como un índice sin signo en el array de sección del vinculador &TYPE_SECTION_START(log_dynamic)[source_id].filters.
Tras la conversión implícita mediante uint32_t, un int16_t con valor -1 se convierte en 0xFFFFFFFF, indexando log_dynamic muy fuera de los límites y provocando que el kernel realice una lectura OOB (fuera de límites) y una operación de modificación-escritura OOB (LOG_FILTER_SLOT_GET/SET) contra la memoria adyacente a la sección log_dynamic.
El valor escrito es un slot de nivel de registro de 3 bits restringido dentro de la palabra de 32 bits objetivo, pero la dirección destino es elegida por el atacante (un pequeño desplazamiento negativo desde log_dynamic) y la escritura se produce en modo supervisor tras una llamada al sistema desde un hilo de usuario no privilegiado, proporcionando una primitiva de corrupción de memoria del kernel / escalada de privilegios.
El defecto es accesible en cualquier compilación con CONFIG_USERSPACE=y y CONFIG_LOG_RUNTIME_FILTERING=y. Presente desde Zephyr v3.3.0 hasta v4.4.1. La corrección reemplaza la comprobación de límites con signo por una comparación sin signo: (uint32_t)src_id < log_src_cnt_get(domain_id), lo que rechaza correctamente las entradas negativas.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.