
Repository di ricerca per CVE-2026-80844 (DirtyAH6), un'escalation di privilegi locale nel kernel Linux IPv6 AH6/XFRM, con PoC, analisi della causa principale e della patch.
DirtyAH6
CVE-2026-80844 è una vulnerabilità del kernel Linux che interessa il sottosistema IPv6 Authentication Header (AH6) / XFRM.
La vulnerabilità è causata da una validazione insufficiente del campo
segments_left dell'IPv6 Routing Header, che può causare un'operazione di memoria
fuori dai limiti (out-of-bounds) e la corruzione della memoria del kernel.
Questo repository è destinato esclusivamente alla ricerca di sicurezza autorizzata, all'analisi delle vulnerabilità, ai CTF e ai test difensivi.
Non utilizzare questa ricerca contro sistemi di cui non si è proprietari o per i quali non si dispone di esplicita autorizzazione ai test.
| Campo | Dettagli |
|---|---|
| CVE | CVE-2026-80844 |
| Nome in codice | DirtyAH6 |
| Componente | Kernel Linux |
| Sottosistema | IPv6 / XFRM / AH6 |
| Tipo di vulnerabilità | Escalation di privilegi locale |
| Vettore di attacco | Locale |
| Complessità di attacco | Bassa |
| Privilegi richiesti | Bassi |
| Interazione utente | Nessuna |
| CVSS v3.1 | 7.8 — Alta |
| Codice interessato | net/ipv6/ah6.c |
| Stato | Corretto |
La vulnerabilità risiede nel percorso di elaborazione dell'IPv6 AH6.
Il codice interessato esegue la manipolazione del routing header tramite:
net/ipv6/ah6.c
Nello specifico, la logica vulnerabile coinvolge:
ipv6_rearrange_rthdr()
La funzione non è riuscita a convalidare adeguatamente la relazione tra:
hdrlen
e:
segments_left
Un attaccante in grado di fornire un pacchetto IPv6 appositamente costruito può quindi causare l'operazione del kernel su memoria al di fuori dei confini attesi dell'header di routing.
Ciò può portare a:
Malformed IPv6 packet
│
▼
AH6 / XFRM processing
│
▼
Invalid routing-header state
│
▼
Out-of-bounds memory operation
│
▼
Kernel memory corruption
│
▼
Potential privilege escalation
Il problema fondamentale è una validazione insufficiente del valore
segments_left dell'IPv6 Routing Header.
Concettualmente, la condizione vulnerabile può essere rappresentata come:
segments_left > available routing-header addresses
Il kernel deve garantire che il numero di segmenti richiesti dall'header di routing sia coerente con la lunghezza effettiva dell'header prima di manipolare i dati di indirizzo associati.
Senza tale validazione, le successive operazioni di memoria possono operare oltre i limiti validi del buffer.
Un'eventuale sfruttamento con successo può consentire a un attaccante con le necessarie capacità/ambiente locale di corrompere la memoria del kernel.
Le potenziali conseguenze includono:
L'effettiva sfruttabilità dipende dalla configurazione del kernel, dai namespace/capacità disponibili e da altre condizioni ambientali.
net/ipv6/ah6.c
Elaborazione pertinente:
AH6
└── IPv6 Routing Header
└── ipv6_rearrange_rthdr()
Lo scenario problematico riguarda metadati di routing-header incoerenti.
Ad esempio, concettualmente:
hdrlen → describes a limited number of addresses
segments_left → claims more addresses than are available
Questa discrepanza deve essere rifiutata prima che il kernel esegua il riordino degli indirizzi.
La correzione upstream introduce una validazione per il valore
segments_left dell'Routing Header prima che il kernel esegua l'operazione
vulnerabile.
Il commit upstream associato è:
7bad4bda74dc4713f398d3b7624ff05478e3a568
xfrm: ah6: validate routing header segments_left
La correzione di sicurezza può essere riassunta come segue:
Before:
Trust segments_left
↓
Rearrange addresses
↓
Potential OOB access
After:
Validate segments_left
↓
Reject malformed header
↓
Safe AH6 processing
Le versioni interessate dipendono dalla cronologia delle correzioni upstream e dei backport dei fornitori.
Gli utenti dovrebbero verificare l'avviso di sicurezza della propria distribuzione anziché basarsi solo sul numero di versione upstream.
Esempi di release stabili upstream corrette includono:
| Ramo del kernel | Release corretta |
|---|---|
| 5.10 | 5.10.270 |
| 5.15 | 5.15.221 |
| 6.1 | 6.1.188 |
| 6.6 | 6.6.157 |
| 6.12 | 6.12.109 |
| 6.18 | 6.18.50 |
| 7.2 | 7.2.4 |
Verificare il kernel in esecuzione:
uname -a
o:
uname -r
Controlla le informazioni dettagliate sul kernel:
cat /proc/version
Per i sistemi basati su Debian/Kali:
apt-cache policy linux-image-amd64
Per sistemi basati su RPM:
rpm -q kernel
I kernel delle distribuzioni spesso applicano backport di correzioni di sicurezza senza modificare la versione upstream in modo evidente. Controlla sempre l'advisory/changelog del fornitore.
La mitigazione principale consiste nell'aggiornare a un kernel che contenga la correzione di sicurezza.
Debian/Kali:
sudo apt update
sudo apt full-upgrade
Poi riavvia:
sudo reboot
Verifica:
uname -r
Per i sistemi in produzione, consultare l'avviso di sicurezza ufficiale della distribuzione Linux prima di applicare gli aggiornamenti del kernel.
Ambiente isolato consigliato:
Host
│
├── Kali Linux
│
└── Vulnerable Linux VM
│
├── Debug kernel
├── IPv6 enabled
├── AH6/XFRM support
└── Kernel symbols
Strumenti di debug utili:
gdb
gef
pwndbg
crash
dmesg
pahole
objdump
readelf
Debug del kernel:
sudo dmesg -w
Ispeziona i simboli del kernel:
cat /proc/kallsyms