
Доказательство концепции для CVE-2026-9198 - IBM Langflow: RCE без аутентификации через обход автологина
Этот репозиторий содержит учебный proof of concept для CVE-2026-9198, затрагивающего IBM Langflow OSS.
PoC (poc.py) демонстрирует, как неаутентифицированный злоумышленник может объединить в цепочку:
GET/POST /api/v1/auto_login (возвращает токен суперпользователя, когда включён автоматический вход), иPOST /api/v1/validate/code (выполняет управляемый атакующим Python-код)для достижения удалённого выполнения кода.
Этот код и предоставленные Docker-стеки предназначены только для локального тестирования безопасности и обучения.
Не запускайте их против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
.
├── poc.py
├── vulnerable/docker-compose.yaml
└── patched/docker-compose.yaml
poc.py: эксплуатирующий PoC.vulnerable/docker-compose.yaml: лабораторный стек с использованием langflowai/langflow:1.10.0 (уязвимый).patched/docker-compose.yaml: лабораторный стек с использованием langflowai/langflow:1.10.1 (целевое исправленное поведение).Оба compose-файла намеренно настроены как лабораторные стенды для тестирования poc.py на http://127.0.0.1:9999.
pip install requests
Запустите уязвимое окружение:
docker compose -f vulnerable/docker-compose.yaml up -d
Запустите PoC:
python3 poc.py
Ожидаемый результат для уязвимой версии включает красную строку [!] и вывод команды, похожий на:
[!] /api/v1/auto_login is vulnerable: uid=... gid=...
Сначала остановите уязвимый стенд (если он запущен):
docker compose -f vulnerable/docker-compose.yaml down -v
Запустите исправленное окружение:
docker compose -f patched/docker-compose.yaml up -d
Запустите тот же PoC:
python3 poc.py
Ожидаемый результат для исправленной версии — зелёная строка [-], указывающая, что цепочка эксплойта больше не срабатывает.
В poc.py:
URL по умолчанию равен http://127.0.0.1:9999CMD по умолчанию равен idИзмените эти константы, если вам нужно протестировать другую локальную цель или команду.