DevHub expone MCPJam Inspector con un RCE que permitio el acceso inicial. En los procesos de la maquina se identifico el token de acceso para Jupyter Notebook y una API, accedimos a estos localmente tras ejecutar Reverse Port Forwarding. Jupyter permitio ejecutar comandos y acceder a un nuevo usuario. Finalmente logramos acceso root, tras identificar un token para la API y analizar el codigo fuente de esta, lo que permitio obtener una clave privada para root.
| Nombre | DevHub |
|---|---|
| OS | Linux |
| Puntos | Retired |
| Dificultad | Medium |
| Fecha de Salida | 2026-05-30 |
| IP | 10.129.9.253 |
| Maker | |
|
Recon
nmap
nmap muestra multiples puertos abiertos: http (80), 6274 (http) y ssh (22).
|
|
Website
El sitio web nos redirige al dominio devhub.htb el cual agregamos al archivo /etc/hosts.
|
|
El sitio describe varios servicios/tecnologias: Node.js, Python 3, Jupyter, MCP Protocol puerto 6274, Git server interno y SO Ubuntu 24.04.

Directory Brute Forcing
feroxbuster no muestra ningun recurso encontrado.
|
|
Website - Port 6274
El puerto 6274 aloja MCPJam Inspector.

Settings indica la version 1.4.2, esta misma version es afectada por una vulnerabilidad (CVE-2026-23744) la cual permite la ejecucion remota de comandos a traves de la API.

User - mcp-dev via CVE-2026-23744
Modificamos el PoC indicando un ping a nuestra maquina.
|
|
La ejecucion muestra un error.
|
|
Pero tcpdump muestra multiples solicitudes ICMP.
|
|
Shell
Modificamos nuevamente el comando realizando la ejecucion de una shell inversa con shells, logrando el acceso como mcp-dev.
|
|
Local Ports
Localmente existen dos puertos a la escucha: 8888 y 5000.
|
|
El puerto 8888 pertenece a un proceso de Jupyter, tambien observamos el token a7f3b2c9d8e1f4a5b6c7d8e9f0a1b2c3d4e5f6a7.
|
|
El puerto 5000 muestra algun tipo de API relacionada a MCP: OPSMCP 2.1.0. Encontramos un script cuyo nombre se relaciona a este servidor, analyst tiene permisos sobre este.
|
|
Reverse Port Forwarding
Ejecutamos chisel para obtener los puertos localmente.
|
|
Puerto 8888
Este puerto indica que necesita de una API Key para acceder a los endpoints listados.

Jupyter
El puerto 8888 muestra jupyter, con autenticacion requerida.

Ingresamos utilizando el token encontrado en el proceso de jupyter-lab. Existe una unica hoja de trabajo.

A traves de esta podemos ejecutar comandos como el usuario analyst.

User - Analyst
Realizamos la ejecucion de una shell inversa para este usuario en la hoja de jupyter.
|
|
Logrando el acceso a este usuario y a la flag user.txt.
|
|
User - root
El archivo .opsmcp_key muestra la API Key para el puerto 8888.
|
|
Tambien, podemos acceder al codigo fuente de la aplicacion (/opt/opsmcp/server.py). En esta, encontramos opciones para administradores que permiten obtener credenciales, tokens y clave SSH del usuario root a traves del endpoint /tools/call.
|
|
Basados en el las diferentes opciones realizamos una solicitud, como objetivo la clave SSH para el usuario root.
|
|
Shell
Utilizamos esta clave para acceder por SSH, logrando acceso root y a la flag root.txt.
|
|
Loot
Dump Hashes
Realizamos la lectura del archivo /etc/shadow.
|
|