
Correções de kernel para a vulnerabilidade Dirty Frag (CVE-2026-43284, CVE-2026-43500)
Série de patches para a classe de vulnerabilidade Dirty Frag descoberta por Hyunwoo Kim (@v4bel).
Dirty Frag permite que um usuário local sem privilégios sobrescreva bytes arbitrários do cache de páginas de arquivos somente leitura (ex.: /usr/bin/su, /etc/passwd), levando à escalada local de privilégios para root em todas as principais distribuições Linux.
Os patches neste repositório NÃO foram escritos pelo mantenedor deste repositório.
- CVE-2026-43284 (patch ESP): de autoria de Hyunwoo Kim (@v4bel) e Kuan-Ting Chen. Integrado ao mainline do kernel Linux no commit
f4c50a4034e6.- CVE-2026-43500 (patch RxRPC): de autoria de Hyunwoo Kim (@v4bel). Enviado para a lista de discussão netdev em
afKV2zGR6rrelPC7@v4bel, aguardando integração.Este repositório é um espelho formatado desses patches, reunidos aqui por conveniência em formato pronto para
git am. Todo o crédito vai para os autores originais. Pesquisa original e PoC: https://github.com/V4bel/dirtyfrag
| Arquivo | CVE | Subsistema | Status |
|---|---|---|---|
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 | ✅ Integrado no 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 | ⏳ Enviado para a ML netdev (afKV2zGR6rrelPC7@v4bel), aguardando integração |
4.10 (commit cac2661c53f3, 2017-01-17) até 6.x anteriores ao f4c50a4034e66.4 (commit 2dc334f1a63a, 2023-06-08) até o upstream (nenhum patch integrado ainda)git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
# Aplicar patch 1 (ESP — CVE-2026-43284)
git am 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
# Aplicar patch 2 (RxRPC — CVE-2026-43500)
git am 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
patch (se o git am falhar devido a desvio de contexto)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 você não puder aplicar o patch imediatamente, coloque os módulos vulneráveis na lista negra:
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"
Aviso: Remover
esp4/esp6desativa o IPsec ESP. Avalie o impacto antes de aplicar em sistemas de produção.
Ambas as variantes compartilham a mesma causa raiz: o caminho de splice() de cópia zero do kernel insere uma página do cache de páginas somente leitura diretamente em um frag de skb sem semântica de copy-on-write. Operações criptográficas subsequentes in-place então escrevem nessa página do cache de páginas, modificando permanentemente o conteúdo do arquivo em cache.
splice(file_fd → pipe → socket)
│
▼
skb->frags[0].page = &page_cache_page_P <- sem CoW!
│
▼
[esp_input / rxkad_verify_packet_1]
descriptografia AEAD/fcrypt in-place src == dst == &P
│
▼
STORE para page_cache_page_P <- escrita arbitrária no cache de arquivo somente leitura
| Variante | Abordagem |
|---|---|
| ESP | Marcar frags de splice com SKBFL_SHARED_FRAG; verificar essa flag em esp_input()/esp6_input() para forçar skb_cow_data() antes da criptografia in-place |
| RxRPC | Estender a verificação de skb_cloned() para (skb_cloned(skb) || skb->data_len) para que skbs não lineares (que podem conter frags de splice) sejam sempre copiados antes da descriptografia in-place |