
Um artigo e PoC de LPE de uma vulnerabilidade de leitura e escrita OOB no Linux Kernel.
Um write-up e Proof-of-Concept de Escalação de Privilégio Local de uma vulnerabilidade de leitura e escrita fora dos limites (OOB) no Kernel Linux.
Você pode encontrar o write-up desta vulnerabilidade no meu blog e também pode encontrar minha introdução ao nf_tables aqui.
O exploit fornecido neste repositório não deve ser esperado a ser executado com sucesso em versões de kernel vulneráveis sem modificações. Existem muitos offsets que diferem entre builds do kernel, assim como, é claro, gadgets de ROP diferentes.
Às vezes, até mesmo a forma como a vulnerabilidade é explorada pode ter que ser alterada devido a diferenças entre builds do kernel. Um exemplo é outro write-up desta vulnerabilidade por David Bouman (@pqlqpql) que você pode encontrar aqui onde ele explora a vulnerabilidade usando pacotes UDP – mirando a pilha quando um pacote UDP está sendo tratado – o que não teria sido possível no meu build do kernel devido a diferenças significativas na organização da pilha. Em vez disso, usei um método mirando a pilha quando um pacote TCP ACK está sendo tratado.
Se você deseja testá-lo por conta própria, recomendo ler meu write-up e seguir o caminho de descobrir os offsets, quais hooks usar, etc.
A versão exata do kernel a partir da qual construí o kernel que estava visando no write-up foi 5.12.0, commit 9f4ad9e425a1d3b6a34617b8ea226d56a119a717.
Para construir o exploit, você precisa das bibliotecas libmnl e libnftnl, bem como da biblioteca POSIX threads (pthread).
Construí-lo é tão simples quanto
gcc -lmnl -lnftnl -lpthread exploit.c -o exploit
A vulnerabilidade surge de nft_validate_register_store introduzida no commit 345023b0db315648ccc3c1a36aee88304a8b4d91 na versão 5.12 e é corrigida no commit 6e1acfa387b9ff82cfc7db8cc3b6959221a95851 na versão 5.17.
Este Proof-of-Concept e o write-up da vulnerabilidade são apenas para fins educacionais. Não sou legalmente responsável por qualquer forma como este código possa ser utilizado.