
Exploração determinística de escalonamento de privilégios local no kernel Linux que encadeia duas primitivas de escrita em page-cache (xfrm/ESP e RxRPC) para acesso root confiável em todas as principais distribuições desde 2017.
Escalação Universal de Privilégios no Kernel Linux
| Campo | Detalhe |
|---|---|
| CVE | CVE-2026-43284 (xfrm/ESP) + CVE-2026-43500 (RxRPC) |
| Apelido | Dirty Frag |
| CVSS | 7.8 HIGH |
| Tipo | Escalação Local de Privilégios (LPE) |
| Introduzido | Linux kernel 4.10 (2017, commit cac2661c53f3) |
| Corrigido | Commits da mainline f4c50a4034e6 / aa54b1d27fe0 |
| Requisitos | Acesso local a shell sem privilégios |
| Vetor remoto | Nenhum — apenas local |
| Divulgado | 7 de maio de 2026 por Hyunwoo Kim (@v4bel) |
Uma falha lógica nos subsistemas xfrm/ESP e RxRPC do kernel Linux permite que um usuário local sem privilégios realize uma gravação arbitrária determinística e controlada no page cache de qualquer arquivo legível do sistema — incluindo binários setuid como /usr/bin/su.
A causa raiz é a descriptografia in-place insegura de fragmentos compartilhados de socket buffer (skb) que referenciam páginas do page cache, particularmente ao usar splice(2) ou sendfile(2). Isso fornece uma primitiva poderosa de gravação arbitrária no page cache, que pode ser aproveitada para sobrescrever arquivos sensíveis em memória e obter acesso total de root.
Duas primitivas distintas são encadeadas para obter cobertura universal:
xfrm-ESP Page-Cache Write: compartilha o mesmo sink do Copy Fail, mas é acionada via os módulos esp4/esp6, independentemente de algif_aead estar disponível. Requer privilégios de criação de namespaces.RxRPC Page-Cache Write: não requer privilégios de namespace, mas rxrpc.ko deve estar presente (carregado por padrão no Ubuntu). Cobre os pontos cegos do CVE-2026-43284.Encadear as duas variantes faz com que elas cubram os pontos cegos uma da outra, alcançando root confiável em todas as principais distribuições.
Sem condição de corrida. Sem novas tentativas. Sem risco de crash. Determinístico em todas as distribuições testadas.
Importante: Mesmo em sistemas onde a mitigação publicamente conhecida do Copy Fail (lista negra do
algif_aead) é aplicada, o Dirty Frag permanece explorável via CVE-2026-43284.
algif_aead (solução alternativa do Copy Fail)CVE-2026-43284 (xfrm/ESP): Linux kernel do commit cac2661c53f3 (2017-01-17) até f4c50a4034e6 (2026-05-05).
CVE-2026-43500 (RxRPC): Linux kernel do commit 2dc334f1a63a (2023-06-08) até aa54b1d27fe0 (2026-05-10).
O tempo de vida efetivo da cadeia de vulnerabilidades é de aproximadamente 9 anos.
Todas as principais distribuições que distribuem kernels nesse intervalo são afetadas, incluindo:
gcc -O0 -Wall -o exp exp.c -lutil && ./exp
Não use em sistemas nos quais você não está autorizado a testar.
⚠️ Importante: Após executar este exploit, o page cache fica contaminado. Para limpar o page cache poluído e garantir a estabilidade do sistema, execute:
echo 3 > /proc/sys/vm/drop_caches
ou reinicie o sistema.
Atualize para um kernel que contenha as correções da mainline e reinicie.
Corrigido na mainline via:
f4c50a4034e62ab75f1d5cdd191dd5f9c77fdff4aa54b1d27fe0c2b78e664a34fd0fdf7cd1960d71# Ubuntu / Debian
sudo apt update && sudo apt upgrade -y && sudo reboot
# RHEL / AlmaLinux / CentOS Stream
sudo dnf clean metadata && sudo dnf upgrade && sudo reboot
# SUSE / openSUSE
sudo zypper refresh && sudo zypper update kernel-default && sudo reboot
# Fedora
sudo dnf upgrade --refresh && sudo reboot
Se não for possível aplicar o patch imediatamente, desabilite os módulos vulneráveis e limpe o page cache.
# Blacklist vulnerable modules
sudo sh -c 'printf "install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n" > /etc/modprobe.d/dirtyfrag.conf'
# Unload modules immediately
sudo rmmod esp4 esp6 rxrpc 2>/dev/null || true
# Drop page cache
echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null
Para cargas de trabalho não confiáveis — contêineres, runners de CI, ambientes com sandbox — restrinja a criação de sockets AF_ALG e splice() via política seccomp ou AppArmor, independentemente do estado do patch. Isso limita a superfície de ataque mesmo em kernels vulneráveis, mas não é uma correção completa.
Verifique se os módulos vulneráveis estão atualmente carregados ou em uso:
# Check if modules are loaded
lsmod | grep -E 'esp4|esp6|rxrpc'
# Check if any process has an AF_ALG socket open
lsof | grep AF_ALG
ss -xa | grep alg
# Confirm workaround is active after reboot
cat /etc/modprobe.d/dirtyfrag.conf
Por que encadear duas vulnerabilidades?
xfrm-ESP Page-Cache Write fornece uma poderosa primitiva STORE arbitrária de 4 bytes e está presente na maioria das distribuições, mas requer privilégios de criação de namespaces — que o Ubuntu às vezes bloqueia via AppArmor. RxRPC Page-Cache Write não requer privilégios de namespace, mas rxrpc.ko não está incluído na maioria das distribuições — exceto no Ubuntu, onde é carregado por padrão. Encadear as duas faz com que seus pontos cegos se cubram mutuamente, alcançando root confiável em todas as principais distribuições.
Qual é a relação com o Copy Fail (CVE-2026-31431)?
A primitiva xfrm-ESP compartilha o mesmo sink de gravação no page cache do CVE-2026-31431, mas é acionada via os módulos esp4/esp6 independentemente do algif_aead. Aplicar a mitigação do CVE-2026-31431 (incluir algif_aead na lista negra) não protege contra o Dirty Frag.
Por que o nome "Dirty Frag"?
A vulnerabilidade corrompe o membro frag do struct sk_buff, colocando-a na mesma classe de bug do Dirty Pipe — falhas lógicas que permitem gravações sem privilégios no page cache.
Este repositório destina-se exclusivamente a fins educacionais e de segurança defensiva. Não use qualquer informação ou código deste repositório em sistemas que você não possui ou para os quais não tenha autorização explícita por escrito para testar.
Fiquem seguros. Apliquem patches cedo. Apliquem patches com frequência. Feliz hacking 🛡️
| Dirty Cow (2016) | Dirty Pipe (2022) | Copy Fail (2026) | Dirty Frag (2026) |
|---|
| Condição de corrida necessária | Sim | Parcial | Não | Não |
| Específico de versão | Sim | Sim | Não | Não |
| Confiabilidade | Instável | Moderada | Determinística | Determinística |
| Cobertura de distribuições | Limitada | Limitada | Todas desde 2017 | Todas desde 2017 |
| Contorna a mitigação do Copy Fail | — | — | N/A | Sim |
| Distribuição | Versão Testada | Status |
|---|
| Ubuntu 24.04.4 | 6.17.0-23-generic | Afetada — patch sendo distribuído |
| RHEL 10.1 | 6.12.0-124.49.1.el10_1.x86_64 | Afetada — patch sendo distribuído |
| AlmaLinux 10 | 6.12.0-124.52.3.el10_1.x86_64 | Afetada — patch disponível |
| CentOS Stream 10 | 6.12.0-224.el10.x86_64 | Afetada — patch sendo distribuído |
| Fedora 44 | 6.19.14-300.fc44.x86_64 | Afetada — patch disponível |
| openSUSE Tumbleweed | 7.0.2-1-default | Afetada — em andamento |
| Debian | — | Afetada — em andamento |
| Componente | Impacto |
|---|
| SSH | ✅ Não afetado |
| dm-crypt / LUKS | ✅ Não afetado |
| kTLS / TLS no kernel | ✅ Não afetado |
| OpenSSL / GnuTLS / NSS (builds padrão) | ✅ Não afetado |
| IPsec / XFRM (túneis ESP, VPNs) | ⚠️ Quebra — esp4 e esp6 ficarão indisponíveis |
| Clientes AFS / OpenAFS que usam RxRPC | ⚠️ Quebra — rxrpc ficará indisponível |
Aplicações que usam AF_ALG + AEAD diretamente | ⚠️ Verifique com lsof | grep AF_ALG |
| Recurso | Link |
|---|
| Correção na mainline do CVE-2026-43284 | f4c50a4034e6 |
| Correção na mainline do CVE-2026-43500 | aa54b1d27fe0 |
| NVD — CVE-2026-43284 | https://nvd.nist.gov/vuln/detail/CVE-2026-43284 |
| NVD — CVE-2026-43500 | https://nvd.nist.gov/vuln/detail/CVE-2026-43500 |
| Data | Evento |
|---|
| 2017-01-17 | Regressão do CVE-2026-43284 introduzida (cac2661c53f3) |
| 2023-06-08 | Regressão do CVE-2026-43500 introduzida (2dc334f1a63a) |
| 2026-05-05 | CVE-2026-43284 corrigido na mainline (f4c50a4034e6) |
| 2026-05-07 | Divulgação pública |
| 2026-05-10 | CVE-2026-43500 corrigido na mainline (aa54b1d27fe0) |
| 2026-05-10+ | Patches das distribuições começam a ser distribuídos |