
Repository di ricerca per CVE-2026-81000 (TUNderflow), un underflow di intero nell'headroom di ricezione TUN/TAP del kernel Linux che consente l'escalation locale dei privilegi, con PoC, analisi della causa radice e configurazione del laboratorio.
TUNderflow
Una vulnerabilità di corruzione della memoria del kernel Linux nel sottosistema di networking TUN/TAP, causata da limiti insufficienti sull'headroom di ricezione e da un underflow di intero nel percorso di allocazione dei pacchetti.
Questo repository è destinato a ricerca di sicurezza autorizzata, analisi di vulnerabilità, ambienti CTF, debug del kernel e test difensivi.
Non utilizzare il codice proof-of-concept contro sistemi senza esplicita autorizzazione.
| Campo | Dettagli |
|---|---|
| CVE | CVE-2026-81000 |
| Nome in codice | TUNderflow |
| Componente | Kernel Linux |
| Sottosistema | TUN/TAP |
| Codice interessato | drivers/net/tun.c |
| Funzione principale | tun_get_user() |
| Classe di bug | Underflow di intero / accesso fuori dai limiti della memoria |
| Impatto | Corruzione della memoria del kernel |
| Impatto potenziale | Escalation dei privilegi locale |
| CVSS v3.1 | 7.8 — Alto |
| Vettore di attacco | Locale |
| Privilegi richiesti | Bassi |
| Interazione utente | Nessuna |
| Stato | Corretto |
L'avviso CVE descrive il problema come un underflow di intero che può causare
il posizionamento di skb->data al di fuori dell'head dell'skb allocato.
La vulnerabilità risiede nel percorso di ricezione TUN/TAP del kernel Linux.
Il codice interessato utilizza l'headroom di ricezione configurato del dispositivo TUN sia come headroom del pacchetto sia nel calcolo di quanta parte dei dati del pacchetto debba rimanere lineare.
Un valore di headroom eccessivo può quindi generare un calcolo non valido in:
SKB_MAX_HEAD(align)
Quando il valore fornito supera l'intestazione skb utilizzabile di una pagina, il calcolo può andare in underflow.
Concettualmente:
Oversized receive headroom
│
▼
SKB_MAX_HEAD()
│
▼
Integer underflow
│
▼
Negative value
│
▼
size_t wrap
│
▼
Invalid skb data placement
│
▼
Kernel memory corruption
L'implementazione vulnerabile si trova in:
drivers/net/tun.c
con tun_get_user() al centro del percorso vulnerabile.
Il problema alla base è un headroom di ricezione TUN insufficientemente limitato.
Il kernel può ricevere una richiesta di headroom di dimensioni eccessive attraverso percorsi di dispositivi di rete che propagano il valore a TUN/TAP.
La vulnerabilità diventa particolarmente interessante quando una configurazione di rete virtuale complessa fa sì che un valore di headroom elevato raggiunga un dispositivo TUN.
La divulgazione pubblica descrive uno scenario che coinvolge:
Netkit
│
▼
VXLAN
│
▼
Open vSwitch
│
▼
TUN
Una configurazione di esempio può propagare circa 4160 byte di margine a una porta TUN raw, causando l'underflow dell'aritmetica vulnerabile.
La corruzione avviene nella logica di gestione della memoria di rete del kernel.
Le potenziali conseguenze includono:
La divulgazione pubblica riporta la vulnerabilità come parte di un gruppo di vulnerabilità local-root di Linux e afferma che il PoC pubblicato può ottenere l'esecuzione da utente locale non privilegiato a root su target supportati.
La sfruttabilità dipende dall'ambiente e richiede la configurazione pertinente del dispositivo TUN/di rete e le funzionalità di supporto.
ATTACKER
│
▼
Oversized network headroom
│
▼
Virtual network device
│
▼
Open vSwitch
│
▼
TUN/TAP
│
▼
tun_get_user()
│
▼
SKB_MAX_HEAD(align)
│
▼
Integer underflow
│
▼
size_t wraparound
│
▼
Invalid skb->data offset
│
▼
Kernel memory corruption
I componenti importanti sono:
drivers/net/tun.c
│
├── tun_set_headroom()
│
├── tun_get_user()
│
└── tun_alloc_skb()
La relazione vulnerabile può essere semplificata come:
tun->align
│
├── skb headroom
│
└── linear-data calculation
Usare lo stesso valore sovradimensionato in entrambi i calcoli crea una relazione non sicura tra lo spazio richiesto e il budget effettivo della testa dello skb.
La proprietà di sicurezza critica può essere rappresentata concettualmente come:
usable_head < requested_headroom
che può comportare:
SKB_MAX_HEAD(align) < 0
seguita da una conversione senza segno:
negative value
↓
size_t
↓
very large unsigned value
Questo può influenzare in ultima analisi l'allocazione di skb e il posizionamento dei dati.
La descrizione ufficiale nota specificamente che il valore risultante va in overflow quando
assegnato alla variabile size_t linear.
La correzione upstream è:
447c9303942c439a117d9b76ce6d6e2116c38ee7
Commit:
net: tun: bound receive headroom
La correzione limita lo spazio disponibile memorizzato da TUN rispetto al budget disponibile di headroom skb di una pagina e al più grande offset valido dell'header skb a 16 bit. Garantisce inoltre che siano disponibili dati lineari sufficienti per l'elaborazione raw di TUN e TAP.