
PoC de CVE-2021-4034 (PwnKit) para fins de treinamento pessoal.
Este repositório contém uma Prova de Conceito para CVE-2021-4034, também conhecida como PwnKit. Foi desenvolvida apenas para fins de treinamento pessoal e educacional. Use apenas em ambientes que você possui ou está explicitamente autorizado a testar.
Para compilar o exploit você precisa de:
pkexec é um utilitário do Polkit que permite que um usuário autorizado execute programas como outro usuário, normalmente com privilégios administrativos, similar ao sudo. CVE-2021-4034 é uma vulnerabilidade de corrupção de memória que afeta este binário. O problema decorre do tratamento inadequado de argumentos quando argc == 0. Isso resulta em uma escrita fora dos limites que permite a um atacante controlar o primeiro ponteiro de variável de ambiente na memória. Sob certas condições, permite que um usuário local sem privilégios escale privilégios para root. Mais detalhes disponíveis aqui: https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt
O exploit final é completamente autossuficiente e não requer bibliotecas externas ou binários adicionais.
Distribuição: Ubuntu 20.04 LTS
Versão do kernel: 5.4.0-42-generic
Versão do Polkit: 0.105-26ubuntu1 (sem patch)
O shell incluído (shell.asm) é escrito em assembly x86_64 para Linux. É compilado como um objeto compartilhado (.so) e embutido no exploit.
Opcionalmente, o shell pode ser implementado em C para maior portabilidade entre distribuições, mas a versão ASM é mantida para fins de aprendizado e prática de codificação assembly de baixo nível.
Nota: Este exploit e shell são compatíveis apenas com ambientes Linux x86_64. Usar uma arquitetura diferente (por exemplo, ARM ou i386) não funcionará.
Compilar:
make
Executar:
./exploit
Limpar:
make clean
Esta vulnerabilidade foi corrigida em janeiro de 2022.
Se você estiver executando uma versão sem patch do policykit-1, seu sistema pode estar vulnerável. Como mitigação temporária, você pode remover o bit SUID do pkexec:
chmod -s /bin/pkexec