
Воспроизводимая лаборатория для CVE-2026-33017 — неаутентифицированного RCE в Langflow. Включает Docker-контейнер с уязвимым сервисом и PoC с минимальным вредом, демонстрирующий выполнение кода через публичную конечную точку build.
CVE-2026-33017 — это уязвимость неаутентифицированного удаленного выполнения кода (RCE) в Langflow, где публичная конечная точка сборки принимает управляемые атакующим данные потока, что позволяет выполнять код пользовательских компонентов на сервере.
В этой лабораторной среде проверочный поток выглядит следующим образом:
PUBLICjob_idПодтверждение получается напрямую через механизм событий API Langflow, что делает результат наблюдаемым через сам интерфейс системы.
В этом документе представлена лабораторная среда только с уязвимостью.
В настоящее время docker compose содержит только один сервис: vuln, поскольку этот проект следует подходу только реальные артефакты и избегает исправленных сред, которые не основаны на официальном исправленном артефакте.
В этой лабораторной среде было проверено следующее поведение:
http://localhost:78611.8.1build_public_tmp возвращает job_idПример объекта подтверждения:
{
"canary": "lf33017-c14fc1c9",
"id_output": "uid=1000(user) gid=0(root) groups=0(root)",
"whoami": "user",
"hostname": "155aa3fd5e2a",
"cwd": "/app",
"python_version": "3.12.12"
}
Ключевыми доказательствами являются:
id_outputwhoamihostnamecwdpython_versionПриведенная выше информация показывает, что управляемый атакующим код действительно выполнялся на стороне сервера.
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── poc/
│ └── poc.py
├── README.md
└── .gitignore
7861 -> 7860Эта уязвимость существует потому, что публичная конечная точка сборки Langflow принимает предоставленные пользователем определения потоков, даже несмотря на то, что конечная точка уже предназначена для публичных потоков. Когда атакующий отправляет определение узла, содержащее код пользовательского компонента, система передает этот код в путь сборки потока, что в конечном итоге приводит к выполнению кода на сервере.
PoC в этом проекте использует пользовательский компонент, который возвращает объект подтверждения в своих выходных данных, чтобы продемонстрировать, что управляемый атакующим код действительно выполняется.
PoC в этом проекте разработан как наименее вредоносный и сосредоточен на четко наблюдаемом подтверждении через API. Его рабочий процесс выглядит следующим образом:
PUBLICjob_idЭтот PoC не охватывает:
docker compose up -d --build
curl -i http://localhost:7861/api/v1/version
python3 poc/poc.py --base-url http://localhost:7861 --artifact-dir ./artifacts/vuln
При успешном выполнении PoC вывод будет выглядеть следующим образом:
[+] http://localhost:7861 ready (version=1.8.1)
=== TARGET: vuln ===
Base URL : http://localhost:7861
Version : 1.8.1
Flow ID : <uuid>
HTTP : 200
Job ID : <uuid>
Canary : lf33017-xxxxxxxx
Events : artifacts/vuln/events-<job_id>.ndjson
Polls : 2
[+] Proof observed through the Langflow API events endpoint:
{
"canary": "lf33017-xxxxxxxx",
"id_output": "uid=1000(user) gid=0(root) groups=0(root)",
"whoami": "user",
"hostname": "<container-hostname>",
"cwd": "/app",
"python_version": "3.12.x"
}
[+] Vulnerable behavior observed
Файл artifacts/vuln/events-<job_id>.ndjson хранит необработанные данные событий для дополнительной отладки.
Этот PoC демонстрирует, что:
Этот PoC не предназначен для демонстрации постоянства или продвинутой пост-эксплуатации и поддерживает воздействие на минимальном уровне, необходимом для проверки уязвимости.
На основе этой лабораторной среды продемонстрированное воздействие включает:
Этот репозиторий намеренно не включает исправленный сервис.
Его область применения ограничена воспроизведением уязвимого поведения на реальном вышестоящем артефакте. Исправленная сторона добавляется только тогда, когда доступен четко проверяемый официальный исправленный артефакт от поставщика или вышестоящего проекта.
По этой причине этот репозиторий намеренно избегает:
Это сохраняет лабораторную среду узконаправленной и технически честной. Вместо представления искусственной параллельной настройки репозиторий сосредоточен на трех вещах:
На практике это делает репозиторий наиболее подходящим для:
docker compose down -v
Эта лабораторная среда предназначена для тестирования только на localhost.
Требования к использованию: