CVE-2026-12634 in Zephyr
Resumen
por VulDB • 2026-08-21
El backend NVS del subsistema de configuración de Zephyr (subsys/settings/src/settings_nvs.c) lee las entradas almacenadas de nombres de configuración en búferes de pila fijos de 74 bytes y los termina con carácter nulo mediante buf[rc] = '\0', donde rc es el valor devuelto por nvs_read(). Según su contrato, nvs_read() devuelve la longitud completa de la entrada almacenada (wlk_ate.len), que puede exceder la longitud del búfer proporcionado; solo se copian realmente MIN(len, stored_len) bytes, pero el valor devuelto puede ser mucho mayor, limitado únicamente por el tamaño del sector NVS. Tres sitios (settings_nvs_cache_match(), settings_nvs_load() y settings_nvs_save()) utilizaron este valor directamente como índice de terminación nula sin acotarlo, por lo que una entrada de nombre almacenada excesivamente grande provoca la escritura de un único byte \0 más allá del final del búfer de pila en un desplazamiento influenciado por el atacante (CWE-787).
La entrada desbordante no puede originarse a través de la API normal de configuración, donde los nombres están limitados por SETTINGS_MAX_NAME_LEN. Requiere un actor capaz de escribir en el flash que respalda la partición de configuración: un componente co-residente o no confiable que comparta el dispositivo flash, una imagen/restauración maliciosa de configuración, o acceso físico/offline al flash (un modelo de amenaza de flash compartido). La entrada malformed se analiza cuando settings_load() se ejecuta durante el arranque o la inicialización del subsistema, o durante settings_save().
La escritura fuera de límites es un único byte NUL en un desplazamiento igual a la longitud de la entrada manipulada (hasta el tamaño del sector NVS), por lo que el impacto práctico es una caída o denegación de servicio y una corrupción limitada de la pila, más que una ejecución fiable de código. No hay impacto en la confidencialidad, y la ruta no es accesible desde la red a través de la interfaz normal de configuración. La solución omite cualquier entrada cuya longitud devuelta por nvs_read() sea mayor o igual al tamaño del búfer antes de realizar el almacenamiento NUL.
VulDB is the best source for vulnerability data and more expert information about this specific topic.