
Analisi tecnica di CVE-2026-43284 (Dirty Frag), un'escalation di privilegi locale nel kernel Linux xfrm ESP che consente scritture nella page cache su file di sola lettura per la compromissione di root.
Analisi tecnica dettagliata della vulnerabilità di escalation locale dei privilegi CVE-2026-43284 (Dirty Frag) nel kernel Linux.
CVE-2026-43284 (comunemente indicata come parte della suite di vulnerabilità Dirty Frag) è una falla critica di escalation locale dei privilegi (LPE) nel kernel Linux. Deriva da un difetto logico all'interno del sottosistema di input xfrm ESP (Encapsulating Security Payload). Il bug consente a un attaccante locale non privilegiato di aggirare le tipiche protezioni Copy-on-Write (CoW) e ottenere una primitiva di scrittura arbitraria nella page cache all'interno di file di sistema in sola lettura (come /usr/bin/su), portando infine a un compromesso completo come root.
Analisi della vulnerabilità e vettore di attacco1.
Il vincolo: Interagire con la configurazione IPsec del kernel richiede normalmente la capability CAP_NET_ADMIN, un privilegio riservato all'utente normale. Il bypass: Un utente locale non privilegiato può creare un User Namespace e un Network Namespace separati e non privilegiati (utilizzando flag come CLONE_NEWUSER | CLONE_NEWNET). All'interno di questo spazio container isolato e non privilegiato, l'attaccante diventa il processo "root" di quel namespace, ottenendo privilegi CAP_NET_ADMIN all'interno di quel contesto limitato.
Con CAP_NET_ADMIN all'interno del network namespace personalizzato, l'attaccante configura una falsa Security Association (SA) e policy IPsec.
Utilizzando chiamate di sistema come splice(2) o vmsplice(2), l'attaccante collega pagine appartenenti a un file di destinazione in sola lettura (ad esempio, /usr/bin/su) in un frammento di socket buffer (skb).
Il vincolo: L'attaccante deve forzare il kernel ad analizzare i dati attraverso la routine esp_input().
La strategia: L'attaccante crea una struttura di rete con incapsulamento ESP-in-UDP e indirizza la trasmissione verso l'interfaccia loopback dell'host (127.0.0.1).
Quando il pacchetto viene ricevuto localmente tramite il canale loopback, lo stack di rete del kernel identifica il wrapper del pacchetto UDP, lo decapsula e passa il payload interno a esp_input() per l'elaborazione.
A causa di un bug logico nei percorsi di append dei datagrammi IPv4/IPv6, il kernel non riesce a contrassegnare correttamente i frammenti del socket buffer sottostante con il flag SKBFL_SHARED_FRAG quando collega pagine nei socket UDP.
Di conseguenza, esp_input() interpreta erroneamente il pacchetto come un buffer privato e non clonato e prende un percorso rapido di ottimizzazione delle prestazioni "no-COW".
Invece di copiare i dati in un buffer utente sicuro, esp_input() esegue una decifratura in-place direttamente sulle pagine di memoria prese in prestito dalla page cache del sistema
Regolando finemente i dati del payload cifrato e utilizzando la configurazione dell'algoritmo crittografico (come gli Extended Sequence Numbers), il processo di decifratura sovrascrive in modo deterministico il binario preso di mira nella page cache.
Una volta che la page cache di un binario come /usr/bin/su è stata avvelenata in memoria con il payload dell'attaccante, l'esecuzione del binario attiva l'esecuzione del payload come root senza mai toccare o modificare il binario memorizzato sul disco fisico effettivo.
Impatto: Escalation locale dei privilegi deterministica e ad alta affidabilità su tutte le principali distribuzioni Linux enterprise, senza rischio di kernel panic.
Remediation: Aggiornare il kernel Linux a versioni che incorporano la patch che impone la gestione di SKBFL_SHARED_FRAG per gli splice dei datagrammi e introduce un fallback sicuro a skb_cow_data() all'interno della logica di elaborazione ESP.