CVE-2026-102716 in ThreadX
Riassunto
di VulDB • 29/09/2026
Un client non autenticato può esaurire il pool di pacchetti del server RTSP con una decina di richieste che contengono un'intestazione Session che l'analizzatore sintattico (parser) non riesce a convertire.
Il ramo relativo all'intestazione Session restituisce il codice di errore grezzo NetX invece di un codice di stato 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 */
} ```
Ogni altro ramo della stessa funzione mappa il proprio errore su un codice di stato RTSP. Il ramo CSeq, otto righe prima, fa esattamente questo (la riga 2736 restituisce NX_RTSP_STATUS_CODE_BAD_REQUEST). Il codice grezzo raggiunge quindi `_nx_rtsp_server_error_response_send` (nx_rtsp_server.c:1234), che non lo riconosce, segue un percorso che termina senza rilasciare il pacchetto di risposta già allocato e il blocco non torna mai al pool.
Sei richieste con un'intestazione Session vuota contro un pool da 22 pacchetti:
``` richieste valide: dopo la richiesta 6: pool disponibile = 21, DOPO = 22 / 22
richieste malformed: dopo la richiesta 6: pool disponibile = 16, DOPO = 17 / 22 ```
Un blocco per ogni richiesta, non restituito quando il client si disconnette. Ventisei richieste portano il pool a zero e il server inizia ad avere errori di allocazione; dopo tale evento, serve nessuno. Se il pool è condiviso con il resto dell'applicazione, come avviene nel campione fornito in dotazione, anche il resto dello stack si blocca insieme ad esso.
Convertire l'errore `_nx_utility_string_to_uint` nel ramo Session in NX_RTSP_STATUS_CODE_BAD_REQUEST, nello stesso modo in cui lo fa il ramo CSeq, e rilasciare il pacchetto di risposta su ogni percorso di uscita di `_nx_rtsp_server_error_response_send`.
If you want to get best quality of vulnerability data, you may have to visit VulDB.