CVE-2026-102720 in NetX Duo
Riassunto
di VulDB • 29/09/2026
Un server DHCP o chiunque sulla LAN che risponda per primo con un messaggio DISCOVER può indurre il client a leggere oltre la fine del messaggio ricevuto di circa un kilobyte.
La funzione di iterazione delle opzioni mantiene un puntatore e uno spostamento (offset) nel ciclo, e l'unico controllo dei limiti utilizza lo spostamento:
```c /* addons/dhcp/nxd_dhcp_client.c:7538, 7572 */ while (i < length - 1) {
... size = *(++data); /* data si sposta di 1: dal tipo al byte della lunghezza */ data += size + 1; /* data avanza ulteriormente di size + 1 */ i += size + 1; /* i avanza solo di size + 1 */
} ```
Un'opzione TLV occupa `size + 2` byte. `data` viene avanzato in totale di `size + 2`, mentre `i` di `size + 1`; pertanto, lo spostamento (`offset`) si trova indietro di un byte rispetto alla posizione reale di lettura per ogni opzione saltata dall'iterazione. Dopo aver saltato abbastanza opzioni, il controllo `i < length - 1` risulta ancora valido anche se `data` è già oltre la fine del messaggio, e la successiva lettura dei byte di tipo e lunghezza avviene su dati che seguono il buffer.
Un singolo pacchetto OFFER contenente una lunga sequenza di opzioni ignorabili (skippable) è sufficiente:
``` ERROR: AddressSanitizer: heap-buffer-overflow READ of size 1 at 0x61b000000794 thread T5 #0 _nx_dhcp_search_buffer addons/dhcp/nxd_dhcp_client.c:7541 #1 _nx_dhcp_get_option_value addons/dhcp/nxd_dhcp_client.c:7082
0x61b000000794 is located 164 bytes to the right of 1648-byte region ```
Un pacchetto OFFER ben formato che segue lo stesso percorso viene gestito normalmente; il client registra l'offerta e passa alla fase REQUESTING. La differenza risiede quindi nella disposizione delle opzioni piuttosto che nel meccanismo di gestione (harness).
La lettura avviene nel thread del client DHCP mentre quest'ultimo è ancora non configurato, pertanto si verifica ad ogni avvio ed è raggiungibile da un risponditore DHCP ostile. I valori letti vengono utilizzati per configurare l'interfaccia di rete; è questo il motivo per cui i byte divulgati diventano osservabili.
Correggere avanzando `i` di `size + 2`, oppure derivare il controllo dei limiti direttamente da `data` anziché mantenere un secondo contatore.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.