
CVE-2026-43284 e CVE-2026-43500 Dirty Frag PoC e exploit
Demonstrador N4C legível para CVE-2026-43284 (XFRM/ESP) e CVE-2026-43500 (RxRPC/RXKAD).
O PoC responde a uma pergunta: um processo sem privilégios pode alterar o cache de páginas
de um arquivo somente leitura de propriedade do root através de um fragmento sk_buff compartilhado?
Ele não sobrescreve /usr/bin/su ou /etc/passwd, não instala um payload, não invoca
PAM/NSS, nem inicia um shell. O exploit público completo permanece no branch exploit.
dirtyfrag-poc.c — as duas primitivas de cache de páginas e uma pequena CLI.prepare-lab.sh — cria dois fixtures inofensivos de propriedade do root.run_as_1000.c / run-as-1000 — rebaixa o shell root da VM para uid/gid 1000.Makefile — build estático reproduzível.--esp)fixture somente leitura
-> splice(arquivo -> pipe -> socket UDP)
-> frag paginado do skb
-> STORE in-place do ESP authencesn
-> os primeiros quatro bytes em cache tornam-se "N4C!"
Apenas uma SA XFRM e uma escrita de quatro bytes são usadas. O ELF do shell root e seu loop de montagem de 48 acionadores do exploit público foram removidos.
--rxrpc)fixture somente leitura
-> splice(arquivo -> pacote RxRPC DATA forjado)
-> descriptografia in-place RXKAD pcbc(fcrypt)
-> uma escrita de 8 bytes selecionada por chave
-> os bytes em cache diferem do fixture original
O PoC não procura por um texto simples em formato de senha porque qualquer bloco
alterado de oito bytes já prova a primitiva. A força bruta offline do fcrypt, o planejador
de escritas sobrepostas, PAM, getent, su sem senha, o tratamento de PTY e o código
do shell foram removidos.
Use apenas em uma VM Linux descartável e autorizada contendo os recursos de kernel necessários.
make
# Execute uma vez como usuário root da VM para recriar os bytes conhecidos do fixture.
./prepare-lab.sh
# O auxiliar então executa o PoC como uid/gid 1000.
./run-as-1000 ./dirtyfrag-poc --esp --verbose
./prepare-lab.sh
./run-as-1000 ./dirtyfrag-poc --rxrpc --verbose
Status de saída:
0 — o marcador apareceu no cache de páginas; a primitiva foi observada.1 — o marcador não apareceu; a escrita no frag compartilhado foi rejeitada.2 — fixture inválido, ambiente não suportado ou falha na configuração.3 — o acionador RxRPC falhou antes da verificação.Recrie os fixtures, ou reinicie a VM descartável, entre as execuções.
main() seleciona uma primitiva e se recusa a executar como uid 0.esp_poc() mostra o caso XFRM/ESP de quatro bytes.rxrpc_poc() mostra um acionador e uma comparação direta antes/depois.A construção do protocolo foi derivada do código-fonte do kernel Linux e da implementação
de referência pública V4bel/dirtyfrag
no commit aab16fcada27142dd8ce8704906cf6736cf213b8. A N4C reescreveu o fluxo de
execução neste demonstrador somente com fixtures e removeu o payload de escalonamento
de privilégios e os estágios de consumo.