Содержание статьи
warning
Статья носит ознакомительный характер и предназначена для специалистов по безопасности, которые проводят тестирование в рамках контракта. Автор и редакция не несут ответственности за вред, причиненный с использованием изложенной информации. Распространение вредоносных программ, нарушение работы систем и тайны переписки преследуются по закону.
Langflow — визуальный конструктор для создания ИИ‑приложений и чат‑ботов. Он нужен, чтобы собирать сложные рабочие пайплайны, подключать LLM и векторные базы данных простым перетаскиванием. В Langflow ты можешь собрать бота вообще без кода или с минимальным скриптингом. Концептуально система похожа на n8n, но более нишевая.

У проекта 151 тысяча звезд на GitHub и 9500 форков. Продукт популярный, поэтому такая уязвимость как CVE-2026-33017 выглядит просто несерьезно. У API Langflow есть метод / — он нужен для запуска рабочих процессов в публичном режиме без авторизации. Любой желающий может вызвать этот метод, но в том и смысл публичных эндпоинтов.
info
Интересный факт: уязвимость не эксплуатировали хакеры. Но когда исследователи выкатили публичное описание уязвимости без PoC и деталей, хакеры взялись за свое темное дело. Потребовалось примерно двадцать часов, чтобы появился эксплоит и пошли первые атаки.
Единственный нюанс — объект data. Если отправишь в запросе свой объект, Langflow использует именно его, а не тот, который лежит в базе данных. Подмена объекта удобна для дебага, но опасна без жесткой фильтрации. А фильтрации не было.
Отследить проблему можно в исходниках уязвимой версии. Команды для скачивания:
git clone https://github.com/langflow-ai/langflow.git
cd langflow
git checkout v1.8.2
Главная проблема — в файле /, строка 633. Функция создает джоб, в который без фильтрации и проверок попадает data:
job_id = await start_flow_build( flow_id=new_flow_id, background_tasks=background_tasks, inputs=inputs, data=data, files=files, stop_component_id=stop_component_id, start_component_id=start_component_id, log_builds=log_builds or False, current_user=owner_user, queue_service=queue_service, flow_name=flow_name or f"{client_id}_{flow_id}", )Разработчик пофиксил CVE, убрав возможность подменять data своим объектом. Это видно в коммите 73b6...d4f0.

Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
