
Prova de conceito de exploit para CVE-2024-48990, demonstrando escalonamento local de privilégios no needrestart por meio de manipulação de PYTHONPATH. Inclui script de execução e binário de payload para testes.
O needrestart é um utilitário amplamente utilizado em sistemas Linux (padrão em muitas versões do Ubuntu) que verifica, após uma atualização de software, se algum serviço ou o próprio sistema precisa ser reiniciado. Ao analisar processos em execução, ele determina se eles estão usando bibliotecas atualizadas ou se precisam ser reiniciados para que as alterações tenham efeito.
Quando o needrestart detecta um processo executando um interpretador Python, ele lê a variável de ambiente PYTHONPATH associada a esse processo a partir de /proc/[pid]/environ e a define antes de iniciar seu próprio interpretador Python para análise.
Se o processo original pertencer a um atacante local, o atacante pode manipular PYTHONPATH para apontar para uma biblioteca maliciosa.
Como resultado, quando o needrestart executa o interpretador Python com privilégios de root e o PYTHONPATH manipulado, ele acaba executando o código do atacante, levando a uma escalada de privilégios para root.
Esta vulnerabilidade afeta apenas versões do needrestart anteriores à 3.8. As versões 3.8 e posteriores incluem uma correção que sanitiza adequadamente variáveis de ambiente como PYTHONPATH antes de invocar o interpretador Python, prevenindo a escalada de privilégios por meio de manipulação maliciosa do ambiente.
Clone o repositório.
Em runner.sh, modifique o IP usado para buscar o binário compilado de modo que aponte para a sua própria máquina.
Na máquina do atacante, conceda permissões de execução e execute binary.sh.
Configure um servidor HTTP:
$ python3 -m http.server
