
CVE-2026-43284 e CVE-2026-43500 Dirty Frag PoC ed exploit
Dimostratore N4C leggibile per CVE-2026-43284 (XFRM/ESP) e CVE-2026-43500 (RxRPC/RXKAD).
Il PoC risponde a una sola domanda: un processo non privilegiato può modificare la cache delle pagine
di un file di sola lettura di proprietà di root attraverso un frammento sk_buff condiviso?
Non sovrascrive /usr/bin/su o /etc/passwd, non installa un payload, non invoca
PAM/NSS, né avvia una shell. Il full exploit pubblico rimane sul ramo exploit.
dirtyfrag-poc.c — le due primitive della page cache e una piccola CLI.prepare-lab.sh — crea due fixture innocue di proprietà di root.run_as_1000.c / run-as-1000 — abbassa la shell root della VM a uid/gid 1000.Makefile — build statica riproducibile.--esp)fixture di sola lettura
-> splice(file -> pipe -> socket UDP)
-> frammento paged di skb
-> STORE in-place ESP authencesn
-> i primi quattro byte in cache diventano "N4C!"
Vengono usati solo una SA XFRM e una scrittura di quattro byte. L'ELF della shell root e il suo loop di assembly a 48 trigger dell'exploit pubblico sono stati rimossi.
--rxrpc)fixture di sola lettura
-> splice(file -> pacchetto RxRPC DATA contraffatto)
-> decrypt in-place RXKAD pcbc(fcrypt)
-> una scrittura di 8 byte selezionata dalla chiave
-> i byte in cache differiscono dalla fixture originale
Il PoC non cerca un plaintext a forma di password perché qualsiasi blocco modificato
di otto byte dimostra già la primitiva. Il brute-force offline di fcrypt, il pianificatore
di scritture sovrapposte, PAM, getent, su senza password, la gestione PTY e il
codice della shell sono stati rimossi.
Da usare solo in una VM Linux usa e getta e autorizzata che contenga le funzionalità kernel richieste.
make
# Eseguire una volta come utente root della VM per ricreare i byte noti delle fixture.
./prepare-lab.sh
# L'helper esegue poi il PoC come uid/gid 1000.
./run-as-1000 ./dirtyfrag-poc --esp --verbose
./prepare-lab.sh
./run-as-1000 ./dirtyfrag-poc --rxrpc --verbose
Stato di uscita:
0 — il marker è apparso nella page cache; primitiva osservata.1 — il marker non è apparso; la scrittura sul frammento condiviso è stata rifiutata.2 — fixture non valida, ambiente non supportato o errore di configurazione.3 — il trigger RxRPC è fallito prima della verifica.Ricreare le fixture, o riavviare la VM usa e getta, tra un'esecuzione e l'altra.
main() seleziona una primitiva e rifiuta di essere eseguito come uid 0.esp_poc() mostra il caso XFRM/ESP a quattro byte.rxrpc_poc() mostra un trigger e un confronto diretto prima/dopo.La costruzione del protocollo è stata derivata dal sorgente del kernel Linux e dall'implementazione
di riferimento pubblica V4bel/dirtyfrag
al commit aab16fcada27142dd8ce8704906cf6736cf213b8. N4C ha riscritto il flusso
di esecuzione in questo dimostratore basato solo su fixture e ha rimosso il payload
di escalation dei privilegi e le fasi consumer.