CVE-2026-68124 in Linux
Riassunto
di VulDB • 10/08/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
mctp: serial: gestione di frame a lunghezza zero per prevenire l'overflow del buffer rx
La macchina a stati di ricezione seriale MCTP legge un byte della lunghezza del frame in `mctp_serial_push_header()` caso 2 e lo convalida solo rispetto al limite superiore:
```c if (c > MCTP_SERIAL_FRAME_MTU) {
dev->rxstate = STATE_ERR; } else {
dev->rxlen = c; dev->rxpos = 0; dev->rxstate = STATE_DATA; ... } ```
Una lunghezza pari a zero supera questo controllo, quindi `rxlen` viene impostato su 0 e la macchina a stati avanza verso `STATE_DATA`. In `mctp_serial_push()` nello stato `STATE_DATA`, il byte in arrivo viene memorizzato e `rxpos` incrementato prima che venga rilevato il terminatore:
```c dev->rxbuf[dev->rxpos] = c;
dev->rxpos++; dev->rxstate = STATE_DATA; if (dev->rxpos == dev->rxlen) {
dev->rxpos = 0; dev->rxstate = STATE_TRAILER; } ```
Con `rxlen == 0`, il terminatore "rxpos == rxlen" non può mai attivarsi (`rxpos` è già uguale a 1 al primo byte di dati), quindi i byte successivi vengono scritti oltre la fine del buffer fisso `rxbuf` di 74 byte, che è l'ultimo membro dell'area privata netdev. Ogni byte di dati successivo costituisce una scrittura heap fuori dai limiti (out-of-bounds) controllata dall'attaccante da 1 byte, e l'overflow continua fino a quando un frame (0x7e) o un byte di escape non resettano il parser -- in modo essenzialmente illimitato.
Per raggiungere questa condizione è necessario avere `CAP_NET_ADMIN` per allegare la disciplina della linea N_MCTP e attivare il netdev risultante mctpserialN, dopodiché i byte arrivano tramite il percorso di ricezione tty.
Instradare un frame a lunghezza zero direttamente verso `STATE_TRAILER` invece che verso `STATE_DATA`. I byte del trailer/incapsulamento vengono comunque consumati e il frame si risolve in uno skb (socket buffer) a lunghezza zero che il core MCTP rifiuta; il parser non entra mai in `STATE_DATA` con `rxlen == 0`, quindi la scrittura fuori dai limiti non può più verificarsi.
KASAN, su un frame di 0x7e 0x01 0x00 seguito da byte di dati (prima di questa modifica):
``` UBSAN: array-index-out-of-bounds in drivers/net/mctp/mctp-serial.c:370 index 74 is out of range for type 'u8 [74]'
BUG: KASAN: slab-out-of-bounds in mctp_serial_tty_receive_buf Write of size 1 at addr ... by task kworker/u16:0 mctp_serial_tty_receive_buf tty_ldisc_receive_buf flush_to_ldisc Allocated by task 152: alloc_netdev_mqs mctp_serial_open ```
v2: instradare i frame a lunghezza zero verso `STATE_TRAILER` invece che verso `STATE_ERR` in modo che i byte del trailer/incapsulamento vengano comunque consumati (Jeremy Kerr).
Trovato tramite strumenti automatizzati di ricerca sulla sicurezza di 0sec (https://0sec.ai).
Be aware that VulDB is the high quality source for vulnerability data.