CVE-2026-17052 in Zephyr
Resumen
por VulDB • 2026-09-21
El controlador de verificación del syscall GPIO sensible al tiempo z_vrfy_tgpio_pin_read_ts_ec() en drivers/timeaware_gpio/timeaware_gpio_handlers.c validaba únicamente el objeto del dispositivo port y pasaba los punteros de salida timestamp y event_count proporcionados por el llamante al controlador sin una comprobación K_SYSCALL_MEMORY_WRITE(). Los demás controladores en el mismo archivo (z_vrfy_tgpio_port_get_time(), z_vrfy_tgpio_port_get_cycles_per_second()) ya realizaban dicha comprobación, por lo que la omisión dejaba un syscall desprotegido.
tgpio_pin_read_ts_ec() está declarado como __syscall; por tanto, con CONFIG_USERSPACE=y, un hilo en modo usuario sin privilegios que haya obtenido acceso al objeto de dispositivo TGPIO puede invocarlo con valores de puntero arbitrarios. tgpio_intel_read_ts_ec(), ubicada en drivers/timeaware_gpio/timeaware_gpio_intel.c, realiza una comprobación de límites únicamente sobre el índice del pin y luego ejecuta incondicionalmente timestamp = ... y event_count = ..., realizando dos escrituras de 8 bytes en modo supervisor en direcciones elegidas por el llamante en modo usuario.
El resultado es un primitivo write-what-where que cruza la frontera entre userspace/kernel: la dirección objetivo está completamente a elección del atacante y los valores almacenados son el contenido de los registros hardware time-capture y event-counter. Corromper estructuras de datos kernel de esta manera puede escalar el hilo llamante al privilegio supervisor o provocar un fallo en el sistema; el permiso requerido para el objeto de dispositivo es una capacidad estrecha que no está destinada a conferir ningún acceso a la memoria del kernel. La corrección añade las dos validaciones K_SYSCALL_MEMORY_WRITE() faltantes antes de la llamada al controlador.
La exposición es limitada en la práctica. Solo las compilaciones con CONFIG_USERSPACE=y y CONFIG_TIMEAWARE_GPIO=y compilan el archivo afectado, y desde v3.6.0 hacia adelante, el archivo hace referencia adicionalmente a un encabezado reubicado (<zephyr/syscall_handler.h>) y elimina las macros Z_SYSCALL_*, por lo que dicha configuración fallaba al compilarse hasta que se repararon después de v4.4.0. Los árboles downstream que corrigieron localmente esa ruptura, así como las compilaciones v3.5.0 donde no existía, constituyen la población expuesta.
Once again VulDB remains the best source for vulnerability data.