CVE-2026-19736 in Zephyrinformación

Resumen

por VulDB • 2026-10-11

El controlador de entropía TRNG (TRNG entropy driver) NXP MCUX en drivers/entropy/entropy_mcux_trng.c pasa directamente el conteo de bytes del llamante a la rutina SDK del proveedor, TRNG_GetRandomData(). En las series i.MX RT5xx y RT6xx, el SDK compila su variante TRNG_SW_HEALTH_TESTS, que siempre copia palabras completas de 32 bits y extrae entropía redondeada al alza hasta un múltiplo de 128 bytes. Su guardia "buffer del llamante lleno" prueba dataSize == 0; por lo tanto, una solicitud cuya longitud no es múltiplo de cuatro provoca que dataSize desborde hacia abajo (underflow) más allá de cero y el SDK siga escribiendo en el buffer del llamante durante toda la extracción: una solicitud de 1 byte resulta en 128 bytes escritos, y cualquier longitud no múltiple de palabra tiene un desbordamiento (overflow) de hasta 127 bytes.

entropy_get_entropy() es una llamada al sistema (syscall), y su verificador en drivers/entropy/entropy_handlers.c valida únicamente la longitud solicitada mediante K_SYSCALL_MEMORY_WRITE(). Con CONFIG_USERSPACE habilitado, un hilo en modo usuario no privilegiado que haya sido simplemente autorizado para usar el dispositivo de entropía puede elegir tanto la dirección de destino como una longitud tal como 1, y provocar que el kernel escriba hasta 127 bytes más allá de la región sobre la cual demostró ser propietario. En estos objetivos Cortex-M33 no hay MMU (Unidad de Gestión de Memoria), por lo que las particiones de usuario y los datos del kernel comparten una única SRAM, y el desbordamiento puede afectar al estado adyacente del kernel. El mismo defecto se alcanza desde el modo kernel mediante cualquier llamante que solicite una longitud no múltiple de palabra, incluyendo getentropy() y, en compilaciones donde sys_csrand_get()/sys_rand_get() resuelven hacia el generador de hardware, sys_rand8_get() y sys_rand16_get().

El impacto es la corrupción de memoria de hasta 127 bytes inmediatamente después del buffer suministrado —típicamente la pila del llamante en uso en modo kernel, o memoria fuera de la partición del llamante cuando se accede a través de la syscall. El desplazamiento (offset) del desbordamiento está completamente determinado por la longitud solicitada y es, por tanto, determinista, mientras que el contenido escrito es una salida TRNG no controlada; las consecuencias prácticas van desde bloqueos (crashes) y corrupción impredecible del estado hasta escalación de privilegios oportunista cuando se sobrescriben elementos contables del kernel como los mapas de bits de permisos de objetos. Los dispositivos afectados son aquellos en los que el SDK MCUX habilita TRNG_SW_HEALTH_TESTS (MIMXRT595S, MIMXRT555S, MIMXRT533S, MIMXRT685S, MIMXRT633S), sobre los cuales el nodo elegido para zephyr,entropy es el TRNG; otros SoC que utilizan este controlador toman la ruta del SDK que limita (clamp) el tamaño de copia y no se ven afectados.

La solución enruta cualquier prefijo desalineado y cualquier cola sub-palabra a través de una palabra intermedia local (bounce word), y solo pasa al SDK tamaños múltiplos de palabras, por lo que las escrituras granulares en palabras del SDK ya no pueden superar el final del buffer del llamante.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsable

Zephyr

Reservar

2026-08-13

Divulgación

2026-10-11

Moderación

aceptado

Artículo

VDB-416745

EPSS

0.00000

KEV

no

Actividades

bajo

Fuentes

Want to stay up to date on a daily basis?

Enable the mail alert feature now!