
CVE-2026-33017 — Эксплойт неаутентифицированного удаленного выполнения кода (RCE) в Langflow
автор: Xer0TLabs x Persephrak Decentralized Syndicate
Этот документ представляет собой высокоуровневое объяснение предоставленной Python-программы для анализа, реагирования на инциденты и защитного анализа. Он намеренно не содержит инструкций по эксплуатации, рекомендаций по выбору целей, примеров полезных нагрузок или процедур получения доступа к системе.
Скрипт позиционирует себя как эксплойт для заявленной проблемы неаутентифицированного удалённого выполнения кода в Langflow. Этот README описывает, что код пытается сделать; он не подтверждает независимо идентификатор CVE, затронутые версии, поведение конечных точек, рекомендации вендора или эффективность скрипта.
Программа структурирована как инструмент автоматизации командной строки, который пытается отправить специально сконструированные JSON-данные на HTTP-конечную точку Langflow. Его предполагаемая предпосылка заключается в том, что управляемый пользователем Python, встроенный в определение потока, будет обработан удалённым приложением.
Если эта предпосылка выполняется на цели, скрипт предназначен для превращения её в произвольное выполнение команд операционной системы. Помимо базовой проверки выполнения, он содержит процедуры, предназначенные для установления персистентности, создания интерактивной удалённой сессии, выполнения команд разведки и генерации пары SSH-ключей локально.
Поскольку эти возможности могут скомпрометировать системы без авторизации, код следует рассматривать как потенциально вредоносный инструмент или инструмент двойного назначения. Его не следует запускать против систем, если только деятельность явно не авторизована и не регулируется определённой областью тестирования.
Программа импортирует стандартные модули Python для разбора аргументов, обработки JSON, HTTP-запросов, сокетов, потоков, выполнения подпроцессов и доступа к файлам.
Она глобально отключает обычную проверку TLS-сертификатов через ssl._create_unverified_context. Это заставляет HTTPS-запросы принимать недействительные или ненадёжные сертификаты. Хотя это иногда встречается в тестовом коде, это небезопасно в производственной среде, поскольку ослабляет защиту от перехвата и подмены.
Colors определяет ANSI-последовательности терминала, используемые для вывода цветного текста.
Logger — это небольшой служебный класс, который выводит информационные сообщения, сообщения об успехе, предупреждения и ошибки. Его метод banner() отображает название скрипта, заявленную уязвимость, заявленный диапазон затронутых продуктов, серьёзность и статус CISA KEV. Эти утверждения являются презентационным текстом в программе и не являются доказательством их точности.
Это основной класс. При инициализации он:
http://, если он отсутствует.Идентификатор потока по умолчанию — это фиксированное значение, похожее на UUID. Программа позволяет переопределить его через опцию командной строки.
_build_malicious_payload(command) создаёт JSON-объект, напоминающий граф потока с одним узлом. Узел помечен как CustomComponent и включает исходный код Python в поле code.
Вставленный исходный код пытается вызвать команду операционной системы. Сначала он пробует один Python API и переключается на вызов подпроцесса в случае ошибки. Затем JSON-структура возвращается в код отправки запроса.
Это основная логика эксплойта: она предполагает, что принимающая служба выполнит отправленный код при обработке графа.
_send_exploit_request(payload_data) сериализует полезную нагрузку как JSON и выполняет HTTP POST-запрос к сконструированной конечной точке. Он включает обычные заголовки, похожие на браузерные, и возвращает как текст тела ответа, так и HTTP-статус.
HTTP-ошибки перехватываются и возвращаются, а не завершают программу. Другие исключения, такие как сбои подключения или таймауты, преобразуются в строки и возвращаются со статусом 0.
check_vulnerability() отправляет полезную нагрузку, содержащую маркерную команду, а затем рассматривает либо успешный HTTP-ответ, либо любой ответ, содержащий слово error, как доказательство того, что цель «выглядит уязвимой».
Это не надёжный метод проверки. Ответ 200, ответ 500 или ошибка приложения могут возникать по многим причинам, не связанным с выполнением кода. Скрипт не наблюдает независимо вывод маркера, поэтому он может давать ложные срабатывания.
execute_command(command) оборачивает предоставленную команду в вредоносную полезную нагрузку потока и отправляет её. Он интерпретирует HTTP 200 или 500 как возможный успешный результат.
Опять же, одни только коды статуса не демонстрируют удалённое выполнение команд. С точки зрения защитного анализа кода, этот метод пытается сделать инструмент гибким, позволяя оператору предоставлять произвольные команды ОС.
_build_ssh_payload() и inject_ssh_key() предназначены для изменения удалённой конфигурации SSH и файлов авторизованных ключей. Предпринимаемые действия включают создание SSH-каталогов, добавление открытого SSH-ключа, изменение разрешений, изменение настроек демона SSH, перезапуск службы SSH, создание механизма персистентности на основе cron и удаление артефактов истории оболочки.
Это поведение персистентности и уклонения от защиты, а не безобидная проверка уязвимости. Программа может заявлять об успехе, основываясь лишь на HTTP-статусе, без подтверждения того, что какой-либо файл или служба действительно были изменены.
_build_reverse_shell_payload() собирает несколько механизмов отката, предназначенных для того, чтобы заставить цель инициировать исходящее сетевое соединение с хостом и портом, контролируемыми оператором.
spawn_reverse_shell() запускает локальный TCP-слушатель в фоновом потоке, коротко ожидает, отправляет удалённую полезную нагрузку, а затем ожидает соединения.
_start_listener() принимает соединение и предоставляет простой интерактивный цикл команд. Это возможность удалённого доступа. Она имеет ограниченную обработку ошибок, не аутентифицирует входящее соединение и не подходит для безопасного администрирования или легитимной тестовой инфраструктуры.
full_exploit_chain() объединяет несколько поведений:
Список разведки предназначен для раскрытия идентичности, привилегий, информации об операционной системе, файлов, процессов, прослушивающих служб, учётных записей и запланированных задач. Это характерно для перечисления после компрометации.
generate_ssh_key_pair(key_path) вызывает локальную программу ssh-keygen для создания пары RSA-ключей длиной 4096 бит, если запрошенные файлы ещё не существуют.
Он создаёт комментарий к ключу, ссылающийся на заявленный CVE, и предназначен для поддержки функции персистентности SSH. Это влияет на машину, на которой запускается сам скрипт, а не на удалённую цель.
main() определяет опции командной строки для выбора цели, идентификатора потока, выполнения одиночной команды, обработки SSH-ключа, настроек обратной оболочки, выполнения полной цепочки, автоматической генерации ключа и подробного вывода.
Код выполняет лишь ограниченную проверку. Например, режимы обратной оболочки и полной цепочки требуют локального хоста и порта. Он не проверяет авторизацию, область действия, право собственности на цель, безопасность URL или то, является ли цель действительно экземпляром Langflow.
encoded_key вычисляется, но никогда не используется.Командам безопасности, анализирующим этот код, следует рассматривать следующее как индикаторы попытки эксплуатации или активности после компрометации:
Для решений по устранению последствий полагайтесь на официальные рекомендации по безопасности Langflow, примечания к выпускам и процесс управления уязвимостями вашей организации, а не на заявления о версиях и серьёзности, встроенные в этот скрипт.
Не запускайте и не распространяйте эту программу как инструмент развёртывания или доступа. Если она была найдена в системе, сохраните её как доказательство, запишите хэши и временные метки, ограничьте доступ к копии, проверьте соответствующие журналы служб и сети и следуйте процессу реагирования на инциденты организации.
Для легитимной авторизованной оценки используйте письменную область действия, неразрушающий план проверки, документированное условие остановки и отчёт, ориентированный на устранение последствий. Избегайте персистентности, обратных оболочек, изменения учётных данных, удаления истории или любых действий, которые могут нарушить работу систем или оставить несанкционированный доступ.