Не успе­ли отой­ти от CVE в n8n, как по сооб­щес­тву ИИ‑раз­работ­чиков был нанесен новый мощ­ный удар. На этот раз уяз­вимость наш­ли в популяр­ном конс­трук­торе Langflow. Баг поз­воля­ет уда­лен­но выпол­нить коман­ды за один зап­рос.

warning

Статья носит озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, которые про­водят тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за вред, при­чинен­ный с исполь­зовани­ем изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и тай­ны перепис­ки прес­леду­ются по закону.

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

Рабочая область в Langflow
Ра­бочая область в Langflow

У про­екта 151 тысяча звезд на GitHub и 9500 фор­ков. Про­дукт популяр­ный, поэто­му такая уяз­вимость как CVE-2026-33017 выг­лядит прос­то несерь­езно. У API Langflow есть метод /api/v1/build_public_tmp/{flow_id}/flow — он нужен для запус­ка рабочих про­цес­сов в пуб­личном режиме без авто­риза­ции. Любой жела­ющий может выз­вать этот метод, но в том и смысл пуб­личных эндпо­интов.

info

Ин­терес­ный факт: уяз­вимость не экс­плу­ати­рова­ли хакеры. Но ког­да иссле­дова­тели выкати­ли пуб­личное опи­сание уяз­вимос­ти без PoC и деталей, хакеры взя­лись за свое тем­ное дело. Пот­ребова­лось при­мер­но двад­цать часов, что­бы появил­ся экс­пло­ит и пош­ли пер­вые ата­ки.

Единс­твен­ный нюанс — объ­ект data. Если отпра­вишь в зап­росе свой объ­ект, Langflow исполь­зует имен­но его, а не тот, который лежит в базе дан­ных. Под­мена объ­екта удоб­на для дебага, но опас­на без жес­ткой филь­тра­ции. А филь­тра­ции не было.

От­сле­дить проб­лему мож­но в исходни­ках уяз­вимой вер­сии. Коман­ды для ска­чива­ния:

git clone https://github.com/langflow-ai/langflow.git
cd langflow
git checkout v1.8.2

Глав­ная проб­лема — в фай­ле /src/backend/base/langflow/api/v1/chat.py, стро­ка 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, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии