
Un'implementazione Go di fragnesia (CVE-2026-46300)
Una SA. Un byte alla volta. Nessuna race.
Porting Go di fragnesia (CVE-2026-46300). Membro della classe di vulnerabilità Dirty Frag - bug separato, stessa superficie, patch propria.
Il bug si trova nel sottosistema Linux XFRM ESP-in-TCP. Quando TCP_ULP espintcp viene installato su un socket dopo che i dati sono già stati trasferiti tramite splice() da un file nella coda di ricezione TCP, il kernel tratta i dati in coda come un record di ciphertext ESP e li decifra in-place. La fonte di quei dati è una pagina della page cache. La decifratura applica tramite XOR il keystream AES-GCM direttamente su di essa.
Il risultato è una scrittura controllata di un singolo byte nella page cache di qualsiasi file leggibile.
Tabella del keystream
Il counter block AES-GCM (RFC 4106) in posizione 2 è [salt(4) || IV(8) || 0x00000002]. Cifrandolo con la chiave di sessione si ottiene un blocco di keystream di 16 byte. Il byte 0 di quel blocco è quello che viene XORato nel byte obiettivo. Variando i 32 bit inferiori del nonce IV, tutti i 256 possibili valori di byte del keystream sono raggiungibili entro i primi 65536 nonce. L'exploit costruisce questa lookup table una volta all'avvio tramite AF_ALG AES-ECB.
Ciclo di byte-flip
Per ogni byte del payload:
needed_keystream = current XOR desired.TCP_ULP fino a quando i dati non sono in coda).current XOR keystream = current XOR (current XOR desired) = desired.Una SA. Massimo 192 trigger. Deterministico.
go build -o fragnesia-go .
./fragnesia-go
In caso di successo apre una shell di root tramite una nuova PTY. Il binario su disco non viene toccato - solo page cache.
echo 1 | tee /proc/sys/vm/drop_caches
esp6 (modalità transport, loopback IPv6)Tutti i kernel precedenti alla patch: https://lists.openwall.net/netdev/2026/05/13/79
Stesso range di dirtyfrag.
Come per dirtyfrag:
rmmod esp4 esp6
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\n' \
> /etc/modprobe.d/fragnesia.conf
| dirtyfrag-go | fragnesia-go |
|---|
| CVE | CVE-2026-43284 / CVE-2026-43500 | CVE-2026-46300 |
| Trasporto | ESP-in-UDP + RxRPC | ESP-in-TCP (ULP) |
| Granularità di scrittura | 4 byte per trigger | 1 byte per trigger |
| XFRM SAs | 48 | 1 |
| Crittografia | HMAC-SHA256 + CBC-AES | AES-128-GCM |
| Famiglia IP | IPv4 | IPv6 |