Кластер MicrosoftSystem64 обзавёлся новой инфраструктурой - сетью подставных проектов на GitHub, через которую распространяется вредоносная программа удалённого доступа. Такое ПО выполняет команды на чужой машине, читает файлы и закрепляется в системе. Работает оно на Windows, macOS и Linux. При этом ИИ-помощников никто не взламывал: атакующие построили проекты, которые ассистент сам предложит установить разработчику.
Описание
Вредоносный код приходит не из самого репозитория, а из цепочки зависимостей. Проекты на JavaScript собирают сторонние библиотеки через менеджер пакетов npm. Подменив одну такую библиотеку, злоумышленник получает исполнение кода у всех, кто установил основной продукт. Срабатывание откладывают: вредоносный код приходит не с первой версией, а с одним из следующих совместимых обновлений. Сам репозиторий при этом не меняется, и проверка в момент установки ничего не покажет. Внешне проект остаётся рабочим - он собирается, проходит тесты и выполняет заявленные функции.
След кампании тянется как минимум к 88 публичным репозиториям на GitHub, по данным исследования Офека Ронена. Ранние волны с вредоносными пакетами для логирования описывали OX Security и JFrog. Позже SafeDep разобрал усложнённую схему доставки: имя зависимости подбирали с опечаткой к популярному клиенту базы данных Redis, а исходный репозиторий оставался неизменным.
Показательный случай - сервер MCP для торговой площадки Shopify. Через MCP (протокол, дающий ИИ-ассистенту доступ к внешним сервисам) разработчик управляет магазином прямо из среды программирования. Проект вёл себя как обычный продукт: подробная документация, рабочий код, история версий. Неочевидной была одна деталь - зависимость с названием, созвучным легитимному клиенту Redis. Сначала проект обходился без этой базы данных. Потом в нём появилось хранилище токенов доступа, встроенное в процедуру авторизации магазина. У посторонней библиотеки возникло объяснимое назначение.
Поддельная история разработки
Аккаунт за проектом выглядел солидным. Он датировался апрелем 2022 года, показывал сотни вкладов, а его репозитории собирали тысячи форков - копий проекта в чужих аккаунтах. Даты создания опровергали эту картину: все 25 публичных проектов появились 24-26 июня 2026 года. Многие при этом несли многолетнюю историю коммитов, то есть зафиксированных изменений кода. Атакующие копировали чужие открытые проекты вместе с их прошлым и переписывали авторство под себя. В одном случае первый коммит датирован сентябрём 2021 года, хотя сам репозиторий появился только в 2026-м.
Историю не только переносили, но и генерировали. В одном проекте сохранился скрипт, который последовательно создавал 57 коммитов и печатал их счётчик. В другом десять этапов разработки появились за одиннадцать секунд.
Популярность выглядела так же убедительно. На 88 связанных репозиториев пришлось 9 881 звезда и 65 681 форк - примерно 6,6 форка на звезду. Один этот показатель ничего не доказывает, поэтому проверяли интервалы между копиями. В семи проектах 664 из 673 промежутков уложились в 179-182 секунды. Новые копии появлялись почти ровно раз в три минуты. В ещё одном случае 1 231 из 1 238 форков принадлежали 22 организациям: у 21 из них ровно по 56 форков, у последней - 55. Сеть работала по кругу и добавляла копии даже после подмены зависимости.
Имя вредоносной библиотеки менялось минимум трижды, а репозиторий и инструкция по установке оставались на месте. Менялся только созвучный пакет. Вместе с новыми форками расходились и новые копии с уже заражённой зависимостью. Для защиты это неудобно: список заблокированных имён быстро устаревает, и проект, перешедший на следующее имя, в него не попадёт.
Документация, поддельная история, видимая популярность и работающий код формируют репутацию до того, как кто-то откроет саму зависимость. ИИ-ассистент выбирает инструмент именно по этим сигналам. Между запросом на поиск пакета и его установкой остаётся один шаг, и проверка зависимостей на этом шаге обычно не происходит. Доверие к репозиторию превратилось в самостоятельную цель атаки, а не в побочный эффект чужой невнимательности.