本仓库仅用于授权的安全研究、渗透测试和教育目的。 请勿在未经明确授权的系统上使用本文所述的技术。
从 MCPJam Inspector RCE 到 root — CVE-2026-23744、JupyterLab 令牌泄露、内核执行与 OPSMCP 权限提升。
本仓库记录了一条完整的 Linux 攻击链,从暴露的 MCPJam Inspector 实例一直到 root 级访问权限。
该攻击链串联了开发者工具、本地服务、凭据处理和应用授权方面的多个弱点:
MCPJam Inspector
│ CVE-2026-23744
▼
RCE
│
▼
JupyterLab Token
│
▼
Jupyter Kernel
│
▼
User
│
▼
OPSMCP API
│
▼
Hidden Admin Tool
│
▼
Root Credential
│
▼
root
[!WARNING] 本仓库仅用于授权的安全研究、渗透测试和教育目的。本文档中的所有目标地址、凭据、令牌及其他与环境相关的值均已脱敏或替换为实验环境占位符。
初步侦察的重点是识别暴露在外部的服务。
nmap -sC -sV -oN nmap_initial.txt TARGET
随后可以执行一次完整的 TCP 扫描:
nmap -p- --min-rate 5000 -oN nmap_full.txt TARGET
相关的外部服务:
| 端口 | 服务 | 角色 |
|---|---|---|
| 22 | SSH | 远程管理 |
| 6274 | MCPJam Inspector | 初始攻击面 |
仅绑定到 localhost 的服务:
| 端口 | 服务 | 权限 |
|---|---|---|
| 8888 | JupyterLab | 用户 |
| 5000 | OPSMCP | root |
暴露在外部、监听端口 6274 的 MCPJam Inspector 成为初始入口点。
暴露的 MCPJam Inspector 实例受 CVE-2026-23744 影响。
MCPJam Inspector 主要用作 MCP 服务器的开发与测试界面。当该界面暴露到不受信任的网络时,此漏洞会变得尤为危险——一个存在缺陷的配置流程会让攻击者可控的数据进入命令执行路径。
Remote Request
│
▼
MCP Server Configuration
│
▼
Command Execution
│
▼
Initial Shell
该漏洞影响 1.4.2 及以下版本的 MCPJam Inspector。在授权测试中,可以使用公开的概念验证(PoC)来验证目标环境是否存在该漏洞。
成功利用后,确认执行上下文:
id
whoami
hostname
获得初始立足点后,本地服务便可见。
ss -tlnp
ps aux | grep -E 'jupyter|python|node'
Network
│
▼
MCPJam Inspector
:6274
│
▼
Initial RCE
│
┌─────────┴─────────┐
▼ ▼
JupyterLab OPSMCP
:8888/local :5000/local
│ │
▼ ▼
User root
这两个内部应用之间的权限差异尤其值得关注。
JupyterLab 进程启动时,其身份验证令牌直接出现在命令行中:
--ServerApp.token=<JUPYTER_TOKEN>
可以通过以下方式查看命令行:
ps aux | grep jupyter
# or
cat /proc/<PID>/cmdline
这展示了一个常见的秘密管理问题:
Secret → Command-line argument → Process metadata → Local credential disclosure
恢复出的令牌可访问本地 Jupyter API。
Jupyter 提供了用于管理内核的 REST API。使用恢复出的令牌完成身份验证后,可以通过以下方式创建内核:
POST /api/kernels
响应中包含内核 UUID。Jupyter 内核通过 WebSocket 进行通信:
/api/kernels/<KERNEL_ID>/channels
Jupyter 消息协议使用 execute_request 消息来运行 Python 代码:
{
"header": { "msg_type": "execute_request" },
"content": { "code": "<AUTHORIZED_LAB_CODE>" }
}
这将在 Jupyter 服务的身份下建立 Python 执行环境——在本环境中,内核以**用户(User)**身份执行。
MCPJam RCE → JupyterLab → User
获得用户级 Shell 后,下一步是检查本地安装的应用。OPSMCP 应用位于:
/opt/opsmcp/
审查源代码后发现了一个嵌入的 API 凭据:
VALID_API_KEY = "<REDACTED_OPSMCP_API_KEY>"
该应用还维护着两个工具集合:
可见工具
ops.system_statusops.list_servicesops.check_diskops.view_logs隐藏工具
ops._admin_dumpops._debug_mode管理功能尤其值得关注,因为它们不会通过常规的工具枚举返回。
未记录在案并不意味着无法访问。
后端仍然注册了这些隐藏工具,并通过通用的工具执行机制接受它们的名称。
应用使用 API 密钥对请求进行身份验证:
X-API-Key: <OPSMCP_API_KEY>
通过身份验证后,工具执行端点仅检查所请求的函数是否存在——而不检查调用者是否被允许运行它。
实际情况:
API Key → Authenticated → Tool exists? → Execute
应有情况:
API Key → Authenticated → Permission check → Allowed → Execute
└ Denied → 403
隐藏的管理功能可以访问由 root 拥有的敏感资源。
管理工具接受一个描述所请求信息的目标参数。支持的一种资源是 root 的 SSH 密钥:
{
"name": "ops._admin_dump",
"arguments": {
"target": "ssh_keys",
"confirm": true
}
}
应用随后读取由 root 拥有的 SSH 私钥,这之所以可行,是因为 OPSMCP 以 root 身份运行,可以读取 /root/*。因此,该应用成为了一个凭据泄露原语。
恢复出实验室授权的 SSH 凭据后,使用严格的权限保存它:
chmod 600 <ROOT_KEY>
验证最终的身份验证上下文:
whoami
id
最终权限级别:root 🎉
┌──────────────────────────────┐
│ MCPJam Inspector │
│ TCP/6274 │
└──────────────┬───────────────┘
│ CVE-2026-23744
▼
┌──────────────────────────────┐
│ Initial RCE │
└──────────────┬───────────────┘
▼
┌──────────────────────────────┐
│ JupyterLab │
│ 127.0.0.1:8888 │
└──────────────┬───────────────┘
│ Token disclosure
▼
┌──────────────────────────────┐
│ Jupyter Kernel │
│ WebSocket RCE │
└──────────────┬───────────────┘
▼
User
│ Source review
▼
┌──────────────────────────────┐
│ OPSMCP │
│ 127.0.0.1:5000 │
│ root │
└──────────────┬───────────────┘
│ API key + hidden tool
▼
┌──────────────────────────────┐
│ Root Credential Leak │
└──────────────┬───────────────┘
▼
root
| 系统 | 监控内容 |
|---|---|
| MCPJam | 意外的配置更改 · 可疑的子进程 · 异常的远程客户端 |
| JupyterLab | 意外的令牌使用 · 意外的内核创建 · 异常的 WebSocket 连接 · 由内核产生的 Shell 进程 |
01 — 开发者工具即是攻击面 为本地开发而设计的工具,一旦暴露到不受信任的网络,就可能成为严重漏洞。
02 — Jupyter 令牌是强大的凭据 获得 Jupyter 令牌所能带来的远不止 UI 访问权——内核 API 可以提供任意代码执行能力。
03 — 隐藏不等于安全 未记录的端点并非授权机制。
04 — 源代码在漏洞利用后极具价值 应用源代码可以立即揭示身份验证机制、秘密、隐藏功能以及权限边界。
05 — 最小权限可以打破攻击链 如果 OPSMCP 当时以非特权服务账户运行,最终影响将会大大降低。
本仓库仅用于授权的安全研究、渗透测试和教育目的。 请勿在未经明确授权的系统上使用本文所述的技术。
⚡ MCPJam → RCE → Jupyter → User → OPSMCP → root ⚡
| 步骤 | 阶段 |
|---|
| 1 | MCPJam Inspector 暴露于网络 |
| 2 | 利用 CVE-2026-23744 |
| 3 | 获得初始 RCE |
| 4 | JupyterLab 令牌泄露 |
| 5 | Jupyter 内核执行 |
| 6 | 用户级 Shell |
| 7 | OPSMCP 源代码审计 |
| 8 | 发现硬编码 API 凭据 |
| 9 | 滥用隐藏的管理功能 |
| 10 | Root 凭据泄露 |
| 11 | root |
| # | 弱点 | 影响 |
|---|
| 1 | 暴露的 MCPJam Inspector | 远程攻击面 |
| 2 | CVE-2026-23744 | 初始 RCE |
| 3 | 进程参数中的令牌 | 凭据泄露 |
| 4 | Jupyter 内核访问 | 用户级代码执行 |
| 5 | 可读的应用源代码 | 凭据发现 |
| 6 | 硬编码的 OPSMCP API 密钥 | API 身份验证绕过 |
| 7 | 隐藏的管理功能 | 特权操作 |
| 8 | 以 root 运行的 OPSMCP | 系统完全沦陷 |
| OPSMCP | 未记录的工具调用 · 与凭据相关的请求 · 意外的 API 客户端 · 管理操作 |
| SSH | 意外的 root 登录 · 新增的 SSH 密钥 · 异常的身份验证来源 |