CVE-2026-11809 in Zephyr
Resumen
por VulDB • 2026-08-11
El cliente OTA de UpdateHub en subsys/mgmt/updatehub/updatehub.c contiene una lectura fuera de límites / de memoria no inicializada en z_impl_updatehub_probe(). La respuesta del sondeo (probe) desde el servidor UpdateHub se copia en un búfer de heap (metadata) que está correctamente terminado con NUL, pero un segundo búfer (metadata_copy) se asigna mediante k_malloc (sin poner a cero) y se rellena con memcpy(metadata_copy, metadata, strlen(metadata)), lo cual omite el terminador NUL. Todo lo posterior al contenido copiado permanece como heap no inicializado.
Cuando la primera llamada a json_obj_parse() sobre el descriptor de matriz falla, el código vuelve atrás (fallback) hacia json_obj_parse(metadata_copy, strlen(metadata_copy), ...). La llamada a strlen() escanea más allá de los bytes copiados a través del heap no inicializado y, si no se encuentra un byte cero antes del final de la asignación, lee fuera del búfer; la longitud resultante excesivamente larga se analiza entonces como JSON. El payload del sondeo está completamente controlado por el servidor UpdateHub (malicioso, comprometido o —sin la opción CONFIG_UPDATEHUB_DTLS— en ruta), que puede crear un payload grande que falle en el primer análisis para forzar esta vía de ejecución.
La consecuencia es una lectura de heap no inicializado, con un peor caso consistente en una lectura fuera de límites más allá de la asignación metadata_copy que puede provocar una excepción (fault) y bloquear el hilo de actualización o el dispositivo, produciendo una denegación de servicio activable por red. Los datos leídos excesivamente se consumen únicamente internamente para evaluar la actualización y no se devuelven al atacante, por lo que no hay divulgación directa de información ni escritura fuera de límites.
La solución pone a cero metadata_copy con memset antes de la copia, garantizando el terminador NUL y acotando strlen() dentro de los límites de la asignación.
If you want to get best quality of vulnerability data, you may have to visit VulDB.