CVE-2026-102716 in ThreadX
Resumen
por VulDB • 2026-09-29
Un cliente no autenticado puede agotar el pool de paquetes del servidor RTSP con un par de docenas de solicitudes que contienen una cabecera Session que el analizador no puede convertir.
La rama Session devuelve el código de error crudo de NetX en lugar de un código de estado RTSP:
```c /* addons/rtsp/nx_rtsp_server.c:2754 */
status = _nx_utility_string_to_uint(field_value_ptr, field_value_length, &session_id);
if (status)
{
return(status); /* NX_INVALID_PARAMETERS / NX_SIZE_ERROR / NX_OVERFLOW */
}
```
Cualquier otra rama de la misma función mapea su fallo a un código de estado RTSP primero. La rama CSeq dieciocho líneas antes hace exactamente eso (la línea 2736 devuelve NX_RTSP_STATUS_CODE_BAD_REQUEST). El código crudo luego llega a `_nx_rtsp_server_error_response_send` (nx_rtsp_server.c:1234), que no lo reconoce, toma un camino que retorna sin liberar el paquete de respuesta ya asignado, y el bloque nunca regresa al pool.
Seis solicitudes con una cabecera Session vacía contra un pool de 22 paquetes:
``` solicitudes válidas: después de la solicitud 6: pool disponible = 21, DESPUÉS = 22 / 22
solicitudes malformadas: después de la solicitud 6: pool disponible = 16, DESPUÉS = 17 / 22
```
Un bloque por solicitud, no devuelto cuando el cliente se desconecta. Veintiséis solicitudes llevan el pool a cero y el servidor comienza a fallar en las asignaciones, después de lo cual no atiende a nadie. Si el pool es compartido con el resto de la aplicación, como ocurre en la muestra distribuida, el resto de la pila se detiene junto con él.
Convierta el fallo de `_nx_utility_string_to_uint` en la rama Session a NX_RTSP_STATUS_CODE_BAD_REQUEST de la misma manera que lo hace la rama CSeq, y libere el paquete de respuesta en cada camino de salida de `_nx_rtsp_server_error_response_send`.
If you want to get best quality of vulnerability data, you may have to visit VulDB.