Fragnesia: la nuova vulnerabilità Linux che colpisce la Page Cache

Non c’è pace per il Kernel Linux in queste ultime settimane. Dopo Copy Fail e Dirty Frag è stata scoperta un’altra vulnerabilità di Linux della stessa categoria di Dirty Frag ribattezzata Fragnesia.

Fragnesia è una vulnerabilità critica di escalation locale dei privilegi (LPE) in Linux, identificata da William Bowling del team V12. Pur essendo un bug distinto all’interno del framework XFRM/ESP, appartiene alla più ampia classe di vulnerabilità nota come Dirty Frag. Sebbene richieda una patch specifica, condivide con Dirty Frag sia l’area d’impatto che le strategie di mitigazione.

Meccanismo di Sfruttamento: Scrittura Arbitraria senza Race Condition

A differenza di molti exploit moderni, Fragnesia non si basa su una race condition. Sfrutta invece un errore logico nel sottosistema ESP-in-TCP di Linux XFRM. Questo bug permette di effettuare scritture arbitrarie di singoli byte direttamente nella page cache del kernel, colpendo file che dovrebbero essere di sola lettura.

Dettagli Tecnici della Vulnerabilità

L’exploit evolve le tecniche di scrittura nella cache di pagina già viste con Dirty Pipe. Il processo avviene secondo questa sequenza:

  1. Manipolazione della coda: Un socket TCP viene commutato in modalità ULP (Upper Layer Protocol) espintcp dopo che i dati di un file sono già stati inseriti nella coda di ricezione.
  2. L’errore di elaborazione: Il kernel interpreta erroneamente le pagine del file in coda come se fossero testo cifrato ESP.
  3. Operazione XOR: Durante la decrittazione, il byte del keystream AES-GCM (posizione 2 del blocco contatore, byte 0) viene sottoposto a un’operazione XOR direttamente con la pagina del file memorizzata nella cache.
  4. Controllo dei byte: Manipolando il nonce dell’IV (Vettore di Inizializzazione) per generare il byte di keystream desiderato, un utente malintenzionato può sovrascrivere qualsiasi byte del file con un valore a scelta. Ogni attivazione del trigger permette la modifica di un singolo byte.

L’Exploit in Azione

Per ottenere i privilegi di root, l’exploit procede come segue:

  • Mapping del Keystream: Viene creata una tabella di ricerca di 256 voci per mappare ogni possibile byte del keystream al relativo nonce.
  • Payload Injection: L’attaccante itera sul payload, attivando la condizione logica splice/ULP per ogni byte da modificare.
  • Esecuzione: L’exploit sovrascrive i primi 192 byte di /usr/bin/su nella memoria cache con un piccolo stub ELF (che esegue setresuid/setresgid e lancia /bin/sh).
  • Persistenza Volatile: Una volta chiamato execve("/usr/bin/su"), l’attaccante ottiene una shell root. È importante notare che la modifica avviene solo nella cache di pagina e non viene scritta sul disco: il binario originale rimane quindi integro e non corrotto dopo un riavvio.

Mitigazione

Poiché la superficie d’attacco risiede nel sottosistema XFRM, le patch di sicurezza rilasciate per la versione 12 e successive sono fondamentali. In assenza di patch immediate, le strategie di difesa sono le stesse raccomandate per la famiglia Dirty Frag, focalizzate sulla limitazione dei permessi per le operazioni di socket e il monitoraggio di chiamate di sistema sospette legate a XFRM.

Marco Giannini
Marco Giannini

Quello del pacco / fondatore di Marco’s Box

Articoli: 5785