Оператор JadePuffer вернулся к ранее взломанному серверу Langflow с новым шифровальщиком ENCFORGE. Вредонос ищет веса моделей, контрольные точки, обучающие наборы, векторные индексы и другие компоненты инфраструктуры машинного обучения, после чего частично шифрует файлы и добавляет к их именам расширение .locked.
Исследователи Sysdig считают операцию агентной: значительную часть разведки, исправления ошибок и построения цепочки атаки выполняла система на базе большой языковой модели. Когда первая попытка доставки шифровальщика провалилась, она создала шесть версий сценария за 5 минут 24 секунды. Последняя версия самостоятельно нашла нужный процесс, перенесла ENCFORGE из контейнера на основную систему, провела тестовое сканирование, запустила шифрование и подсчитала заблокированные файлы.
Sysdig наблюдала команды, временные метки, автоматически исправлявшийся код и подробные комментарии внутри вредоносных нагрузок. Исследователи не видели системную инструкцию агента, его панель управления и действия человека вне атакуемой среды. Полную автономность операции поэтому нельзя считать независимо доказанной.
JadePuffer — условное название неизвестного оператора, введённое Sysdig. Первая описанная операция JadePuffer началась со взлома доступного из интернета экземпляра Langflow. Атакующий собрал учётные данные, исследовал внутреннюю сеть и добрался до отдельного производственного сервера с MySQL и Alibaba Nacos.
В той атаке были зашифрованы 1342 элемента конфигурации Nacos. Для этого использовалась встроенная функция MySQL AES_ENCRYPT(), после чего оригинальные таблицы конфигурации и истории удалили, а в базе создали таблицу с требованием выкупа. Сгенерированный ключ вывели в стандартный поток, но не сохранили и не отправили на сервер оператора. Восстановить конфигурации с его помощью после завершения процесса было невозможно даже при оплате.
Новая операция связана с прежней тем же адресом электронной почты в требовании выкупа. Sysdig считает это наиболее сильным признаком того, что за обеими кампаниями стоял один оператор. Инструментарий при этом изменился: вместо одноразовых сценариев Python и шифрования внутри MySQL появился скомпилированный вредонос на Go с отдельной системой ключей и полноценным интерфейсом командной строки.
JadePuffer снова использовал CVE-2025-3248 — критическую ошибку в открытой платформе Langflow для создания приложений и рабочих процессов на базе языковых моделей.
Проблема находилась в обработчике /api/v1/validate/code. Версии ниже 1.3.0 позволяли удалённому пользователю отправить подготовленный запрос и выполнить произвольный код без предварительной авторизации. Исправление вошло в Langflow 1.3.0.
CISA добавила CVE-2025-3248 в каталог известных эксплуатируемых уязвимостей 5 мая 2025 года. Новая атака произошла более чем через год после появления публичного предупреждения и доступного обновления.
Langflow представляет особый интерес для злоумышленников, поскольку такие серверы часто связаны с облачными платформами, поставщиками языковых моделей, векторными базами и объектными хранилищами. В переменных окружения и внутренних базах могут находиться ключи API, пароли и строки подключения.
После выполнения кода JadePuffer проверил архитектуру и имя системы, начал искать облачные ключи, токены API и реквизиты баз данных, а затем проверил доступность внутренних служб.
Во время разведки атакующий обнаружил /var/run/docker.sock. Этот файл позволяет обращаться к программному интерфейсу Docker и управлять контейнерами.
Возможность записывать команды в Docker-сокет фактически даёт контроль уровня root над основной системой. Через него можно создать привилегированный контейнер, подключить корневую файловую систему хоста и получить доступ к данным за пределами исходного контейнера.
JadePuffer попытался скачать ENCFORGE с управляющего сервера по адресу, заканчивавшемуся на /lockd. Файл не появился в целевом каталоге. Исследователи позднее выяснили, что бинарник размещался под скрытым именем /.lockd: запрос к /lockd возвращал ошибку 404.
После неудачи атакующая система не прекратила работу. Она перешла к созданию механизма, который должен был перенести уже находящийся внутри контейнера файл через границу пространств имён на основную систему.
Первая версия была простой оболочкой для обращения к Docker через Unix-сокет. Каждый следующий вариант устранял конкретную проблему предыдущего.
Последовательность выглядела так:
-
do.py v1отправлял команды Docker через curl; -
do.py v2добавил копирование через/proc/<pid>/root; -
ns.pyиспользовал общий механизм выполнения, но содержал жёстко заданный идентификатор процесса; -
x.pyсоздавал одноразовый контейнер для каждой команды; -
h.pyзаменил внешние утилиты собственным клиентом для Unix-сокета; -
deploy.py v1начал автоматически получать идентификатор процесса через Docker API; -
deploy.py v2добавил настоящее шифрование и проверку результата.
Первые шесть итераций и финальная доработка заняли 5 минут 24 секунды. Последний сценарий определял процесс целевого контейнера, копировал lockd через procfs, создавал привилегированную среду с подключённым корнем хоста и запускал nsenter для перехода в пространства имён основной системы.
Сначала ENCFORGE запускался с параметром проверки без шифрования. После успешного теста сценарий включал рабочий режим --lock, ждал несколько секунд, искал процесс lockd, читал журнал и подсчитывал файлы с расширением .locked.
Эта последовательность стала главным аргументом в пользу агентного характера новой атаки: механизм доставки строился и исправлялся непосредственно во время вторжения, а не запускался в виде заранее подготовленного неизменяемого сценария.
ENCFORGE представляет собой статически собранный шифровальщик на Go. Исследованный файл был упакован с помощью UPX и запускался под именем lockd.
Полный анализ распакованного бинарника выявил около 180 целевых расширений. Значительная часть списка относится к моделям, данным и инструментам машинного обучения.
Среди целей присутствуют:
-
контрольные точки
.ckpt,.h5,.pbи модели.onnx; -
файлы PyTorch
.pt,.pt2и.pth; -
веса в формате
.safetensors; -
локальные модели
.ggmlи.gguf; -
сериализованные объекты
.pklи.pickle; -
векторные индексы
.faiss; -
наборы данных
.parquet,.arrow,.featherи.tfrecord; -
массивы NumPy
.npyи.npz; -
файлы
DuckDBи векторы.vec.
Наличие этих форматов само по себе ещё могло бы объясняться широким списком документов. На целевую специализацию указывает справка параметра --include, позволяющего добавлять собственные маски. В качестве примеров в ней приведены адаптеры LoRA и файлы GGJT — старый формат весов, связанный с ранними версиями llama.cpp.
Шифровальщик также ищет форматы macOS, включая файлы связки ключей и проекты Xcode. Наличие отдельной версии для macOS не подтверждено.
ENCFORGE использует гибридную криптографическую схему. Содержимое обрабатывается алгоритмом AES-256 в режиме счётчика, а симметричный ключ защищается встроенным открытым ключом RSA-2048.
Шифровальщик не обязательно обрабатывает файл полностью. Он шифрует отдельные области, что ускоряет повреждение крупных весов и наборов данных. Подобный подход применяется современными программами-вымогателями для сокращения времени атаки.
Заблокированные файлы получают расширение .locked. ENCFORGE умеет продолжать прерванную работу, не повреждая повторно уже обработанные объекты, завершает процессы, удерживающие файлы открытыми, и удаляет собственный исполняемый файл после завершения.
Записки с требованием выкупа создаются под именами README, HOW_TO_DECRYPT или README_DECRYPT. В них жертве присваивается уникальный идентификатор и предлагается связаться с оператором для получения платёжных инструкций.
В исследованной версии ENCFORGE отсутствовали сетевой клиент, функции отправки данных, модули облачных хранилищ и логика подготовки файлов к выгрузке.
Во время наблюдавшейся операции Sysdig также не обнаружила подтверждённой кражи информации. Оператор не использовал известный сайт публикации утечек, а в шифровальщике не было ссылки на платёжный портал в сети Tor.
Кампания строилась по модели одиночного вымогательства: давление создаёт потеря доступа к данным, а не угроза их публикации.
Исследованный экземпляр работал в Linux, но внутри него сохранился код для отключения восстановления Windows.
В бинарнике присутствуют вызовы vssadmin.exe для удаления теневых копий и bcdedit.exe для изменения параметров восстановления загрузки. В перечне завершаемых процессов указаны Microsoft SQL Server, Outlook, Word, OneNote и другие приложения Windows.
Исследователи пришли к выводу, что ENCFORGE использует единую кодовую базу Go, которую можно собирать под разные операционные системы. Реальный образец для Windows в рамках этой операции не описан.
Поддержка macOS остаётся предположением. Список расширений включает специфические для Apple файлы, но системных команд и процессов macOS в изученном бинарнике нет.
Sysdig оценивает прямые затраты на восстановление производственной модели примерно в $75–500 тыс. Сумма включает облачные графические ускорители, несколько обучающих запусков и работу инженеров. Это ориентир исследовательской компании, а не универсальная цена для любого проекта.
Затраты зависят от размера модели, сложности собственных данных и количества экспериментов, необходимых для получения производственного результата.
Шифрование нескольких вариантов на общем хранилище увеличивает ущерб. Если рядом находился обучающий датасет, сначала придётся восстановить или заново собрать данные, а уже затем повторять обучение и строить векторные индексы.
Утверждать, что модели принципиально невозможно восстановить, неверно. Актуальная автономная или неизменяемая резервная копия позволяет вернуть сохранённые артефакты без полного переобучения.
В первой кампании Sysdig зафиксировала более 600 осмысленных нагрузок, выполненных за сжатый период. Код содержал подробные комментарии на естественном языке, объяснявшие цели команд, причины выбора систем и приоритеты атакующего.
После ошибок система не ограничивалась повтором той же команды. Она анализировала результат и создавала исправленный вариант. В одном эпизоде между неудачным входом в Nacos и работающим многоэтапным исправлением прошло 31 секунда.
Новая операция продемонстрировала такое же поведение при работе с Docker: после неправильного пути к бинарнику возникла серия постепенно усложнявшихся инструментов, завершившаяся работающей цепочкой выхода на хост.
Эти признаки позволили Sysdig классифицировать JadePuffer как агентного субъекта атаки — оператора, чьи возможности в значительной мере реализуются ИИ-агентом.
Точный уровень самостоятельности остаётся неизвестным. Человек мог определять цели, утверждать критические действия или вмешиваться между наблюдавшимися запросами. Поэтому корректнее говорить об оценке исследователей, а не о доказанном полностью автономном взломе.
Первая кампания опиралась на одноразовые команды Python и встроенную функцию шифрования MySQL. Она была привязана к конкретной базе, а ключ оказался потерян после выполнения.
Новая версия получила отдельный бинарник, интерфейс командной строки, гибридную криптографическую схему, идентификаторы задач и упоминание сопутствующего генератора ключей keyforge.
Во внутренних путях ENCFORGE встречается название проекта encfile. Эти признаки указывают на создание многократно используемого инструментария, а не разового сценария для одной системы.
На управляющем сервере также находилась подготовленная копия CPython 3.14 с замаскированным именем файла. В наблюдавшейся атаке она не запускалась, поэтому включать её в фактическую цепочку заражения нельзя.
Основной признак первоначального доступа — создание дочерних процессов Langflow после обращений к /api/v1/validate/code. Особого внимания требуют вызовы subprocess.run и subprocess.check_output от имени пользователя веб-приложения.
Обращения процесса Langflow к /var/run/docker.sock также должны вызывать предупреждение. Платформе не требуется создавать привилегированные контейнеры или подключать корневой каталог основной системы.
Сильными индикаторами попытки выхода из контейнера служат:
-
Privileged: true; -
PidMode: host; -
подключение / с правом записи;
-
запуск
nsenter --target 1; -
вызовы
Docker API/containers/createи/containers/{id}/startот имени веб-приложения.
После запуска ENCFORGE появляются многочисленные файлы .locked, особенно в каталогах с .gguf, .safetensors, .ckpt, .faiss, .pkl и .parquet. Sysdig также опубликовала правило YARA для распакованного бинарника.
Есть новость? Станьте автором.
Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.