
Desafio CTF que implanta o exploit CVE-2022-0847 (Dirty Pipe) para sobrescrever arquivos somente leitura. Inclui scripts de configuração, dicas e verificação para prática de exploração do kernel.
Para este desafio, você quer sobrescrever o arquivo somente leitura "cat.txt" usando o exploit CVE-2022-0847 Existem muitas maneiras de fazer isso usando o exploit
Verifique se o arquivo cat.txt é somente leitura
As limitações são: o atacante deve ter permissões de leitura (porque precisa usar splice() para enviar uma página para um pipe) o deslocamento não deve estar em um limite de página (porque pelo menos um byte dessa página deve ter sido enviado para o pipe) a escrita não pode cruzar um limite de página (porque um novo buffer anônimo seria criado para o restante) o arquivo não pode ser redimensionado (porque o pipe tem seu próprio gerenciamento de preenchimento de página e não informa ao cache de página quantos dados foram anexados)
Crie um pipe.
Preencha o pipe com dados arbitrários (para definir o flag PIPE_BUF_FLAG_CAN_MERGE em todas as entradas do anel).
Drene o pipe (deixando o flag definido em todas as instâncias struct pipe_buffer no anel struct pipe_inode_info).
Use splice() para enviar dados do arquivo alvo (aberto com O_RDONLY) para o pipe a partir de antes do deslocamento alvo.
Escreva dados arbitrários no pipe; esses dados substituirão a página do arquivo em cache em vez de criar um novo struct pipe_buffer anônimo porque PIPE_BUF_FLAG_CAN_MERGE está definido.
Sobrescreva o cat.txt, altere
I'm a cat
1444
para
I'm a dog
2025
Use check_cat.sh para verificar se funcionou ou não chmod +x check_cat.sh ./check_cat.sh
Use o seguinte chmod +x cat_generate.sh ./cat_generate.sh
As dicas estão em hints.txt