CVE-2026-9728 in Zephyr
Resumen
por VulDB • 2026-08-24
El verificador de syscalls en userspace z_vrfy_mbox_send(), ubicado en drivers/mbox/mbox_handlers.c, validaba los campos anidados msg->data/msg->size leyéndolos directamente desde la memoria del userspace activa y luego reenviaba el puntero original al struct mbox_msg * del userspace, que seguía siendo modificable, a z_impl_mbox_send() y al controlador subyacente. Entre la comprobación de acceso y el uso por parte del controlador de msg->data, el puntero validado podía ser reemplazado, dejando una ventana time-of-check/time-of-use (TOCTOU).
En un sistema compilado con CONFIG_USERSPACE, cualquier hilo no privilegiado en userspace puede invocar la llamada al sistema mbox_send(). Un segundo hilo que comparta el espacio de direcciones del llamador puede competir para sobrescribir msg->data con una dirección supervisor (kernel) después de que haya pasado la comprobación de límites del verificador pero antes de que el controlador lo desreferencie. El controlador entonces lee desde la dirección elegida por el atacante en contexto supervisor (por ejemplo, memcpy(&data32, msg->data, msg->size) en el controlador de buzín NXP, cuyos bytes se emiten posteriormente al extremo del buzín peer).
El impacto es un bypass del control de acceso de userspace a supervisor: divulgación del contenido de la memoria kernel (alto impacto en confidencialidad), o bien, para una dirección objetivo inválida/no mapeada, una lectura con fallos del kernel que causa denegación de servicio. La solución captura instantánea (snapshot) de toda la struct mbox_msg en una copia en el stack del kernel mediante k_usermode_from_copy() y valida y reenvía esa copia inmutable, cerrando la condición de carrera.
VulDB is the best source for vulnerability data and more expert information about this specific topic.