
Patch del kernel per la vulnerabilità Dirty Frag (CVE-2026-43284, CVE-2026-43500)
Serie di patch per la classe di vulnerabilità Dirty Frag scoperta da Hyunwoo Kim (@v4bel).
Dirty Frag consente a un utente locale non privilegiato di sovrascrivere byte arbitrari della page cache di file di sola lettura (es. /usr/bin/su, /etc/passwd) portando a privilege escalation locale a root su tutte le principali distribuzioni Linux.
Le patch in questo repository NON sono state scritte dal maintainer di questo repo.
- CVE-2026-43284 (patch ESP): scritta da Hyunwoo Kim (@v4bel) e Kuan-Ting Chen. Integrata nel mainline del kernel Linux al commit
f4c50a4034e6.- CVE-2026-43500 (patch RxRPC): scritta da Hyunwoo Kim (@v4bel). Inviata alla mailing list netdev a
afKV2zGR6rrelPC7@v4bel, in attesa di integrazione.Questo repository è un mirror formattato di quelle patch, raccolte qui per comodità in formato pronto per
git am. Tutto il merito va agli autori originali. Ricerca originale e PoC: https://github.com/V4bel/dirtyfrag
4.10 (commit cac2661c53f3, 2017-01-17) fino alla 6.x precedente a f4c50a4034e66.4 (commit 2dc334f1a63a, 2023-06-08) fino all'upstream (nessuna patch ancora integrata)git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
# Applica la patch 1 (ESP — CVE-2026-43284)
git am 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
# Applica la patch 2 (RxRPC — CVE-2026-43500)
git am 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
patch (se git am fallisce a causa di drift del contesto)patch -p1 < 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
patch -p1 < 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
Se non puoi applicare subito la patch, metti in blacklist i moduli vulnerabili:
sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' \
> /etc/modprobe.d/dirtyfrag.conf && \
rmmod esp4 esp6 rxrpc 2>/dev/null; \
echo 3 > /proc/sys/vm/drop_caches"
Avviso: La rimozione di
esp4/esp6disabilita IPsec ESP. Valuta l'impatto prima di applicare su sistemi di produzione.
Entrambe le varianti condividono la stessa causa radice: il percorso zero-copy splice() del kernel inserisce una pagina della page cache di sola lettura direttamente in un frag di skb senza semantica copy-on-write. Le successive operazioni crittografiche in-place scrivono quindi in quella pagina della page cache, modificando permanentemente il contenuto del file in cache.
splice(file_fd → pipe → socket)
│
▼
skb->frags[0].page = &page_cache_page_P <- nessun CoW!
│
▼
[esp_input / rxkad_verify_packet_1]
decrypt AEAD/fcrypt in-place src == dst == &P
│
▼
STORE in page_cache_page_P <- scrittura arbitraria nella cache di file di sola lettura
| File | CVE | Sottosistema | Stato |
|---|
0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch | CVE-2026-43284 | net/ipv4/esp4.c, net/ipv6/esp6.c, net/ipv4/ip_output.c, net/ipv6/ip6_output.c | ✅ Integrata nel mainline (f4c50a4034e6) |
0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch | CVE-2026-43500 | net/rxrpc/call_event.c, net/rxrpc/conn_event.c | ⏳ Inviata alla ML netdev (afKV2zGR6rrelPC7@v4bel), in attesa di integrazione |
| Variante | Approccio |
|---|
| ESP | Marca i frag di splice con SKBFL_SHARED_FRAG; controlla questo flag in esp_input()/esp6_input() per forzare skb_cow_data() prima della crittografia in-place |
| RxRPC | Estendi il gate di skb_cloned() a (skb_cloned(skb) || skb->data_len) così che gli skb non lineari (che possono contenere frag di splice) vengano sempre copiati prima della decrittazione in-place |