
Repository di ricerca per CVE-2026-74469 (DiagSpill), un overflow del contatore del trasporto peer SCTP del kernel Linux che causa una scrittura fuori dai limiti, con PoC, analisi della causa principale e dettagli sulla patch.
DiagSpill
Una vulnerabilità SCTP del kernel Linux causata da un overflow del contatore
dei trasporti peer a 16 bit, che consente al contatore di avvolgersi da 65535 a 0. Durante un dump
diagnostico SCTP, il valore avvolto può causare una prenotazione insufficiente del payload skb
seguita da una scrittura fuori dai limiti dei dati dell'indirizzo peer.
Questo repository è destinato esclusivamente alla ricerca di sicurezza autorizzata, all'analisi di vulnerabilità del kernel, ad ambienti CTF, al debug del kernel e a test difensivi.
Non utilizzare il codice proof-of-concept contro sistemi senza esplicita autorizzazione.
| Campo | Dettagli |
|---|---|
| CVE | CVE-2026-74469 |
| Nome in codice | DiagSpill |
| Componente | Kernel Linux |
| Sottosistema | SCTP / sock_diag |
| File interessato | net/sctp/associola.c |
| Funzione principale | sctp_assoc_add_peer() |
| Classe di bug | Integer overflow / Scrittura fuori dai limiti |
| Impatto | Corruzione della memoria del kernel |
| Impatto potenziale | Escalation locale dei privilegi |
| CVSS v3.1 | 7.0 — Alta |
| Vettore di attacco | Locale |
| Complessità di attacco | Alta |
| Privilegi richiesti | Bassi |
| Interazione utente | Nessuna |
| Stato | Corretto |
L'avviso CVE del kernel Linux descrive il problema come un overflow a 16 bit
di transport_count in SCTP, seguito da un'allocazione INET_DIAG_PEERS
di dimensioni insufficienti e da una scrittura fuori dai limiti durante il dump diagnostico.
Il codice vulnerabile mantiene il numero di trasporti peer univoci in un contatore a 16 bit:
transport_count
Ogni nuovo peer unico aggiunto incrementa il contatore.
Il confine critico è:
65535
L'aggiunta di un altro transport univoco causa:
65535 + 1
↓
0
La conseguente circonvoluzione crea un'incoerenza tra:
transport_count
e:
transport_addr_list
Il sottosistema diagnostico in seguito si affida al contatore incapsulato nel calcolo della dimensione del buffer di risposta, continuando comunque a iterare sull'elenco completo degli indirizzi dei peer.
La vulnerabilità può essere rappresentata come:
SCTP Association
│
▼
Add unique peers
│
▼
transport_count
uint16_t
│
▼
65,535 peers
│
▼
+ 1 unique peer
│
▼
Integer wrap
│
▼
transport_count = 0
│
▼
SCTP sock_diag
│
▼
Reserve incorrect payload
│
▼
Iterate complete peer list
│
▼
Out-of-bounds skb write
L' advisory upstream afferma specificamente che il 65.536° trasporto riporta il contatore a zero.
Il codice diagnostico si basa effettivamente su due diverse viste dello stesso stato.
transport_count
│
▼
payload size
transport_addr_list
│
▼
copy every peer address
Dopo il wrap dell'intero:
transport_count = 0
transport_addr_list =
[peer 1]
[peer 2]
[peer 3]
...
[peer 65536]
L'allocatore riserva quindi spazio in base a:
0 peers
mentre l'operazione di copia può ancora essere elaborata:
65536 peer addresses
Questa discrepanza produce la violazione della sicurezza della memoria.
L'avviso del Kernel Linux descrive il dump diagnostico risultante come la prenotazione di un payload vuoto e la successiva scrittura di circa 8 MiB di indirizzi peer oltre la coda dello skb.
Concettualmente:
Expected skb:
┌───────────────────────────────┐
│ INET_DIAG header │
├───────────────────────────────┤
│ Peer addresses │
└───────────────────────────────┘
▲
│
valid end
Actual vulnerable state:
┌───────────────────────────────┐
│ INET_DIAG header │
└───────────────────────────────┘
▲
│
skb tail
↓
Peer address writes
↓
Peer address writes
↓
Peer address writes
↓
OUT-OF-BOUNDS WRITE
Red Hat classifica la vulnerabilità come CWE-787: Out-of-bounds Write.
Il percorso rilevante può essere riassunto come:
SCTP association
│
▼
sctp_assoc_add_peer()
│
▼
transport_count++
│
▼
16-bit overflow
│
▼
SCTP sock_diag
│
▼
INET_DIAG_PEERS
│
▼
skb payload reservation
│
▼
transport_addr_list iteration
│
▼
Out-of-bounds write
Il file sorgente interessato è:
net/sctp/associola.c
L'annuncio CVE del kernel Linux identifica esplicitamente questo file.
La correzione upstream è:
bd0e9289e2642f6a5c54faad304ce0f41e926d22
Commit:
sctp: prevent peer transport count overflow
La correzione rifiuta un nuovo peer univoco quando:
transport_count >= U16_MAX
È importante sottolineare che il controllo avviene dopo la ricerca del peer esistente.
Ciò preserva la capacità di recuperare un trasporto già esistente anche quando l'associazione ha raggiunto il limite.
New peer
│
▼
transport_count++
│
▼
Possible 16-bit wrap
│
▼
Diagnostic size mismatch
│
▼
OOB write