Три независимых инцидента объединяет одна цель — вычислительные ресурсы и данные, стоящие за LLM-серверами. Малварь PoeLLM заразила более 3400 серверов ради криптомайнинга, в LMCache нашли критическую уязвимость, позволяющую выполнить код на кэш-сервере без аутентификации, а восемь вредоносных npm-пакетов скачали 40 767 раз и доставили RAT и стилер. Ниже — что именно произошло, как это работает и что остаётся неизвестным.
Что случилось
PoeLLM — малварь кампаниисерии связанных атак, проводимых одним актором угроз Canto Incognitoкампания, нацеленная на открытую AI/LLM-инфраструктуру для установки криптомайнеров и расширения ботнета, нацеленная на открытую AI/LLM-инфраструктуру. По данным Lumen Black Lotus Labs, она активна с апреля 2026 года и заразила более 3400 серверов-жертв. На пике операций в середине июня кампания затрагивала почти 2200 серверов, из которых около 800 были активны ежедневно. Цель — установка криптомайнеров XMRigпрограмма для майнинга криптовалюты Monero и Ironпрограмма для майнинга криптовалюты и подключение жертв к Kryptexроссийский сервис облачного майнинга криптовалют.
В LMCache — открытом ПО для ускорения LLM-серверов вроде vLLM — нашли критическую уязвимость CVE-2026-105192 с оценкой 9.8. Неаутентифицированный атакующий может выполнить код на кэш-сервере, и исправленной версии на момент публикации нет.
Восемь вредоносных npm-пакетов кампании MALFEXсерия атак через цепочку поставок npm, в рамках которой с августа 2023 года опубликовано 12 пакетов, восемь из которых признаны вредоносными скачаны в совокупности 40 767 раз и доставляют Overlord RATоткрытый инструмент удалённого доступа, написанный на Go и использующий транзакции Solana для извлечения адреса командного центра и стилер movinlikeNode.js-стилер, нацеленный на Discord, браузеры, Telegram и криптовалютные кошельки.
PoeLLM: как устроена атака
Первичное проникновение идёт через эксплуатацию известных уязвимостей в публично доступных сервисах. Целями названы LiteLLMпрокси-сервер, дающий единый доступ к разным языковым моделям, Gotenbergсервис, преобразующий документы в PDF и другие форматы, Giteaплатформа для совместной работы с git-репозиториями и Ivanti Sentryкорпоративный шлюз для защищённого доступа к внутренним приложениям. После компрометации хосты переиспользуются: их превращают в сканеры и эксплойт-серверы, которые ищут новые уязвимые системы и отправляют на их открытые порты HTTP POST-запрос, заставляющий скачать вредоносное ПО с C2сервер управления, через который малварь получает команды и полезную нагрузку.
Адрес C2 спрятан в стихотворении, размещённом в GitHub-репозитории. При смене C2 меняются несколько слов, и адрес выводится из ключа, связанного с этими словами. Заражённые хосты расширяют ботнет: инфицированные серверы становятся сканерами и эксплойт-серверами, что позволяет находить и компрометировать дополнительные системы.
Lumen Black Lotus Labs также указывает на недавний трафик к SSH и другим порталам входа как на признак экспериментов с распределёнными атаками методом перебора, отмечая, что зрелость этой возможности остаётся неясной.
LMCache: непропатченный RCE в кэш-сервере
Уязвимость находится в multiprocess-режиме LMCache, где кэш работает как отдельный сервер, доступный LLM-воркерам через ZeroMQбиблиотеку обмена сообщениями, по которой воркеры обращаются к общему кэш-серверу, чтобы регистрироваться и обмениваться закэшированными данными. Этот сокет не имеет аутентификации. Один из типов сообщений распаковывается через pickleформат сериализации Python, способный нести код и исполнять его при декодировании. Сервер распаковывает сообщение ещё до проверки его типа, поэтому специально сформированное сообщение позволяет выполнить код отправителя. Код исполняется с привилегиями процесса LMCache, а в официальных контейнерах этот процесс работает как root.
Уязвимость затрагивает LMCache с версии 0.3.9, выпущенной в октябре 2025 года, по 0.5.5 — последний стабильный релиз, а также присутствует в релиз-кандидатах 0.5.6 и в ветке разработки. Исправленной версии не существует.
Удалённо эксплуатировать уязвимость можно только если оператор назначил серверу маршрутизируемый адрес: по умолчанию сервер слушает только локальную машину. Официальный пример развёртывания в Kubernetes запускает сервер именно так, слушая все сетевые интерфейсы.
Рядом стоит отдельная, уже исправленная уязвимость в vLLM — CVE-2026-105756. До версии 0.30.0, выпущенной 22 сентября, один запрос с некорректным значением cache_salt — параметром, который передаётся через multiprocess-коннектор LMCache, — мог обрушить движок в развёртываниях с этим коннектором. Это отказ в обслуживании с оценкой 6.5, не позволяющий выполнять код.
npm-пакеты: три пути заражения
Атака заражает Windows-системы через три отдельных пути: загрузчик Overlord RAT и цепочку установки стилера movinlike. Overlord — открытый RAT на Go, использующий транзакции Solana для извлечения адреса C2. Стилер movinlike — Node.js-стилер, нацеленный на Discord, браузеры, Telegram и криптовалютные кошельки.
Три пакета — tlxbnhd, tldriver и mxdriver — работают как загрузчики Overlord RAT: вредоносный код срабатывает через lifecycle-хукискрипты npm, автоматически запускаемые на разных этапах установки пакета и скачивает исполняемый файл Windows.
В пакете function-flag есть postinstall-хук, запускающий JavaScript-полезную нагрузку для скачивания с удалённого сервера; каждая версия пакета обслуживает нагрузку из другого места. В версии 1.7.3 postinstall-скрипт запускает example.js, который вызывает функцию ASCII-арта пакета со шрифтом Bloody. Это значение запускает скрытую процедуру: она скачивает node.exe с cdnzona.discloud.app, сохраняет его в %APPDATA%\node.exe и запускает со скрытым окном. Пакет function-color собственной нагрузки не несёт, но указывает function-flag как зависимость. Оба пакета всё ещё активны.
Из 40 767 загрузок 37 419 приходятся на function-flag — он крупнейший драйвер активности.
Почему это стало возможно
LLM-серверы привлекательны тем, что их вычислительную мощность можно использовать для скрытого майнинга. Атаки Canto Incognito в первую очередь нацелены на интернет-доступные корпоративные развёртывания — именно такие, как LiteLLM и Gotenberg.
Кэш-серверы добавляют к этому вторую проблему: их сетевые интерфейсы могут не иметь аутентификации. ZeroMQ-сокет multiprocess-сервера LMCache открыт без проверки, а данные из него попадают в pickle. Та же ошибка — передача данных из неаутентифицированного сетевого сокета в pickle — была найдена исследователями в других фреймворках AI-инференса в ноябре 2025 года под общим названием ShadowMQгруппа уязвимостей в фреймворках AI-инференса, при которых данные из неаутентифицированного сетевого сокета попадают в pickle. Имеет ли код LMCache общий источник с теми проектами, не установлено.
JFrog присвоил уязвимости LMCache оценку 9.8 из 10 — критический диапазон для сервера, привязанного к маршрутизируемому адресу.
Что делать операторам
До выпуска патча JFrog советует не назначать multiprocess-серверу LMCache маршрутизируемый адрес и держать его порт на локальной машине или в доверенной кластерной сети. Брандмауэр, ограничивающий доступ к порту, снижает риск, но не устраняет его: любой хост, способный открыть соединение, может выполнить код.
Для LLM-инфраструктуры в целом предлагается набор мер. Среду разработки выделяют в отдельный изолированный сегмент, в качестве усиления — физически изолированный, и запрещают задачи, не связанные с конкретной разработкой. Для фреймворков, библиотек и инструментов предписан анализ уязвимостей и обновления, включая SCAавтоматический анализ состава программного обеспечения: он показывает, какие сторонние компоненты и зависимости входят в проект, и помогает вовремя замечать среди них уязвимые. Для обучающих данных — доверенные источники, антивирусная проверка, обособленное хранилище и контроль целостности через контрольные суммы и подпись. В эксплуатации — изоляция и микросегментация, квотирование запросов и токенов, детектор аномальных запросов, регистрация всех запросов и ответов модели вместе с логами фильтрации. Раз в год рекомендуется внешнее тестирование ИИ-системы на промпт-инъекции и состязательные атаки.
Ограничения и открытые вопросы
Атрибуция PoeLLM сделана с умеренной уверенностью: активность приписана италоязычному актору угроз на основе италоязычных артефактов и netflowданных о сетевых потоках — записях о том, какой трафик и между какими узлами шёл.
По LMCache патча нет, и LMCache не опубликовал security advisory. Совет JFrog при этом не даёт операторам способа определить, был ли сервер уже атакован. Шесть дополнительных отчётов о безопасности LMCache открыл один пользователь GitHub 6 октября, за день до публикации CVE-2026-105192. В них утверждается о неаутентифицированном доступе к кэшированным данным разных арендаторов и к сетевым службам, выполняющим команды без входа. Отчёты исходят из одной учётной записи, опираются на заявления о proof-of-conceptдемонстрации работоспособности атаки без готового эксплойта и не имеют ни CVE, ни подтверждения от сопровождающих, ни исправления. Один из них указывает на изменившееся поведение по умолчанию: административный HTTP-сервер, слушавший все сетевые интерфейсы в 0.5.5, в релиз-кандидатах 0.5.6 слушает только локальный хост.
По npm-кампании полнота списка не заявлена как исчерпывающая: с августа 2023 года опубликовано 12 пакетов, восемь из которых помечены как вредоносные, и приведён список из восьми. Связь между разными кампаниями не установлена.