Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en zephyr de zephyrproject (CVE-2026-13343)

Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-200 Revelación de información
Fecha de publicación:
24/08/2026
Última modificación:
12/10/2026

Descripción

La biblioteca de respuesta de UMP Stream en lib/midi2/ump_stream_responder.c construye paquetes de respuesta en una estructura midi_ump de 16 bytes (uint32_t data[4]). Los constructores make_endpoint_info() y make_function_block_info() rellenan solo las dos primeras palabras (res.data[0] y res.data[1]) y, antes de esta corrección, declaraban su resultado como una variable local no inicializada (struct midi_ump res;). Las dos palabras restantes (res.data[2], res.data[3]) retienen contenido obsoleto de la pila.<br /> <br /> Las notificaciones de información de punto final y de bloque de función son mensajes de UMP Stream (UMP_MT_UMP_STREAM), que tienen 4 palabras de longitud, por lo que el paquete completo de 16 bytes -incluyendo las dos palabras no inicializadas- es transmitido textualmente por cfg -&gt; send(). El respondedor es impulsado por solicitudes de descubrimiento de punto final / descubrimiento de bloque de función de UMP Stream suministradas por el atacante a través de ump_stream_respond(). En el servidor Network MIDI 2.0 integrado (subsys/net/lib/midi2/netmidi2.c), estas solicitudes llegan como datagramas UDP y, con el punto final predeterminado sin autenticación, un par remoto puede establecer una sesión y activar las respuestas; la misma biblioteca también sirve a hosts USB MIDI 2.0.<br /> <br /> Cada solicitud de descubrimiento hace que el dispositivo divulgue 8 bytes de su propia memoria de pila no inicializada al par, y la solicitud es libremente repetible. Esto es una fuga de información solo de confidencialidad (la causa raíz es el uso de una variable no inicializada, CWE-457/CWE-908); las palabras filtradas podrían incluir datos residuales o valores de puntero. No hay impacto en la corrupción de memoria, la integridad o la disponibilidad.<br /> <br /> La corrección inicializa a cero ambas estructuras de resultado (struct midi_ump res = {0};), por lo que las palabras finales se borran antes de la transmisión. Estos son los únicos dos constructores de respondedores que dejaron palabras finales sin establecer (send_string() ya pone a cero su búfer), por lo que la fuga está completamente cerrada.