Qué es y cómo funciona la falla
La vulnerabilidad CVE-2026-91007 (CWE-822) reside en los verificadores de llamadas al sistema (syscall verifiers) para la API de controladores de cargadores en el sistema operativo en tiempo real Zephyr. Estos verificadores, ubicados en drivers/charger/charger_handlers.c, no inspeccionaban el argumento prop antes de copiar una unión de datos (union charger_propval) entre los espacios de memoria del usuario y del kernel. Dos miembros de esta unión son punteros a función: status_notification y online_notification.
Las funciones vulnerables z_vrfy_charger_set_prop() y z_vrfy_charger_get_prop() pasaban la unión suministrada por el usuario directamente al callback del controlador o copiaban una dirección del kernel de vuelta a la memoria del usuario. Con la opción CONFIG_USERSPACE habilitada, cualquier hilo en modo usuario con acceso a un objeto de dispositivo cargador podía llamar a charger_set_prop() con una de estas propiedades de notificación y un valor de puntero arbitrario.
Los controladores afectados almacenaban este puntero y luego lo invocaban desde sus manejadores de interrupciones, que se ejecutan en modo supervisor (kernel), ante eventos como conectar o desconectar un cable. Esto resulta en un secuestro del flujo de control con privilegios de kernel, derrotando el aislamiento que CONFIG_USERSPACE debe proporcionar.
Productos y versiones afectadas
La falla afecta a sistemas basados en Zephyr RTOS que tengan habilitada la funcionalidad de espacio de usuario (CONFIG_USERSPACE) y utilicen uno de los siguientes controladores de cargadores que implementan las propiedades de notificación vulnerables:
drivers/charger/charger_max20335.cdrivers/charger/charger_pf1550.cdrivers/charger/charger_bq2518x.c
Impacto y probabilidad de explotación
El impacto es alto: un atacante con acceso a nivel de usuario puede lograr la ejecución de código con privilegios completos del kernel, comprometiendo por completo el dispositivo. La vulnerabilidad también permitía la divulgación de direcciones de código del kernel y la supresión de notificaciones del cargador. La métrica CVSS asignada es 7.8 (Alta). Según el análisis de INCIBE-CERT de España, la severidad se clasifica como P (Prioritaria).
Actualmente, Shodan no reporta hosts expuestos en internet con esta vulnerabilidad detectada, lo que sugiere un volumen bajo de objetivos directamente accesibles desde la red pública. Sin embargo, el riesgo es significativo en contextos donde un atacante ya tiene acceso a nivel de usuario en el dispositivo.
Qué hacer (mitigación)
La solución aplicada por el proyecto Zephyr hace que ambos verificadores rechacen explícitamente las dos propiedades de notificación (CHARGER_PROP_STATUS_NOTIFICATION y CHARGER_PROP_ONLINE_NOTIFICATION) cuando son llamadas desde el modo usuario, incluso si el callback suministrado es NULL. Además, se añadió una aserción en tiempo de compilación (BUILD_ASSERT) para forzar una revisión de seguridad cuando se agreguen nuevas propiedades a la unión.
Los usuarios y desarrolladores que integren Zephyr deben actualizar a una versión que incluya este parche. Los llamadores que se ejecutan en modo supervisor (supervisor-mode) de las funciones charger_set_prop() y charger_get_prop() no se ven afectados por esta falla.
| CVE | CVE-2026-91007 |
|---|---|
| Severidad | HIGH |
| CVSS | 7.8 / 10 |
| CWE | CWE-822 |
| Exposición (Shodan) | sin hosts expuestos detectados actualmente |