CVE-2026-12364 in Zephyr
Resumen
por VulDB • 2026-08-14
El verificador de llamadas al sistema en espacio de usuario `z_vrfy_z_log_msg_static_create()` en `subsys/logging/log_msg.c` era un mero passthrough: reenviaba los argumentos `source`, `desc`, `package` y `data` proporcionados por el llamante directamente a la implementación en modo kernel `z_impl_z_log_msg_static_create()` sin realizar ninguna de las comprobaciones obligatorias `K_SYSCALL_*`. Dado que `z_log_msg_static_create()` está declarado como `__syscall`, bajo `CONFIG_USERSPACE` cualquier hilo en modo usuario no privilegiado puede invocarlo directamente con argumentos completamente controlados por el atacante.
El manejador en modo kernel desreferencia cada uno de estos valores no confiables: `frontend_runtime_filtering()` lee a través del puntero `source` como una estructura `struct log_source_dynamic_data`, `cbprintf_package_copy()` lee `desc.package_len` bytes desde el puntero `package`, y `z_log_msg_finalize()` realiza un `memcpy()` de `desc.data_len` bytes desde el puntero `data`. Sin ninguna verificación, un hilo de usuario puede proporcionar direcciones arbitrarias del kernel y longitudes arbitrarias, y el kernel leerá desde ellas.
El impacto es una denegación de servicio en modo kernel (el kernel falla al desreferenciar un puntero elegido por el atacante) y, donde la salida del backend de registro sea observable para el atacante, divulgación de memoria arbitraria del kernel copiada en el mensaje de registro emitido: una violación de confidencialidad a través del límite usuario/kernel que el sandbox de espacio de usuario está diseñado para imponer. Las lecturas no corrompen la memoria del kernel, por lo que no existe un primitivo de escritura fuera de límites (out-of-bounds write).
La corrección añade la validación requerida al verificador: acota `desc.package_len` frente a `Z_LOG_MSG_MAX_PACKAGE`, rechaza valores distintos de NULL o desajustes de longitud, y aplica `K_SYSCALL_MEMORY_READ()` sobre `package`, `data` y (cuando el filtrado en tiempo de ejecución con un frontend está habilitado) `source`, por lo que cualquier acceso fuera de límites o puntero del kernel ahora genera una excepción `K_OOPS` en lugar de ser atendido.
VulDB is the best source for vulnerability data and more expert information about this specific topic.