Кампания, проводимая северокорейской группировкой Void Dokkaebi (известной также как Famous Chollima), вышла за рамки точечной социальной инженерии и превратилась в механизм червеобразного распространения через экосистему разработчиков. Если ранее злоумышленники ограничивались атаками на одного специалиста, то теперь скомпрометированный репозиторий сам становится вектором заражения для следующей волны жертв. Исследователи из TrendAI Research обнаружили, что атака использует доверенные рабочие процессы разработки, в частности вредоносные задачи Visual Studio Code (VS Code) и инъекции кода, которые выполняются во время обычной активности программиста. Когда заражённый код попадает в корпоративные или популярные открытые репозитории, под угрозой оказываются все участники, форки и проекты, зависимые от такого кода.
Описание
Механизм распространения основан на двух взаимодополняющих методах. Первый способ пассивен: репозиторий содержит файл ".vscode/tasks.json" с задачей, настроенной на автоматический запуск при открытии рабочего пространства. Когда жертва клонирует такой репозиторий, открывает его в VS Code и принимает запрос доверия к рабочей области, задача выполняется без дальнейшего взаимодействия. Вредоносная программа либо загружается из удалённого адреса, либо активируется из встроенного в репозиторий файла шрифта или изображения. Второй механизм - активная инъекция, которую злоумышленники выполняют удалённо после того, как машина разработчика уже скомпрометирована. В отчёте TrendAI Research описано, что атакующие добавляют обфусцированный JavaScript в конфигурационные файлы вроде "postcss.config.mjs", "tailwind.config.js" и "eslint.config.mjs". Эти файлы редко подвергаются тщательной проверке, а добавленный код часто скрывается за счёт пробелов, уводящих его за правый край экрана при просмотре различий. Для маскировки изменений используется скрипт "temp_auto_push.bat", который извлекает метаданные последнего коммита, временно меняет системное время, дополняет коммит вредоносным кодом и принудительно отправляет его с флагом "--no-verify", обходя предварительные проверки. В истории git такой коммит неотличим от оригинала.
Масштаб заражения оказался значительным. Анализ, проведённый в конце марта 2026 года, выявил более 750 заражённых репозиториев, свыше 500 вредоносных конфигураций задач VS Code и 101 экземпляр инструмента подмены коммитов. Среди пострадавших организаций - DataStax (не менее пяти репозиториев, заражённых в конце января - начале февраля) и Neutralinojs (восемь тысяч звёзд и 495 форков, все четыре репозитория были принудительно отправлены с вредоносными коммитами 2 марта 2026 года). Атака на Neutralinojs оставалась незамеченной в течение трёх дней, пока её не обнаружила команда OpenSourceMalware. Такие цифры говорят о том, что кампания активна и продолжает расширяться, а каждый скомпрометированный разработчик становится источником заражения для следующего.
Доставка вредоносной нагрузки реализована через инфраструктуру блокчейна. Многоступенчатый загрузчик обращается к блокчейну Tron, извлекает хеш транзакции из заданного кошелька, затем использует его для получения зашифрованного кода из транзакции Binance Smart Chain. Если запрос к Tron не удаётся, загрузчик переключается на Aptos. Полученная полезная нагрузка расшифровывается с помощью XOR-ключа и выполняется. Таким образом злоумышленники могут менять доставляемое вредоносное программное обеспечение, просто публикуя новую транзакцию в блокчейне, не изменяя код самого загрузчика. Среди доставляемых угроз - вариант трояна удалённого доступа (RAT) DEV#POPPER, который поддерживает одновременную работу нескольких операторов, избегает сред непрерывной интеграции и доставки (CI/CD), а для закрепления в системе внедряется в такие приложения, как VS Code, Cursor, Discord и GitHub Desktop.
Последствия для организаций особенно серьёзны, когда атака достигает разработчиков с доступом на запись в корпоративные или популярные открытые репозитории. В отличие от традиционных атак на цепочку поставок, таких как инцидент SolarWinds, здесь не требуется компрометация инфраструктуры сборки. Злоумышленники эксплуатируют привычки разработчиков: привычку не добавлять папку ".vscode" в ".gitignore", невнимательность при проверке конфигурационных файлов и доверие к содержимому собственных репозиториев. Каждый форк и каждый проект, зависимый от заражённого репозитория, становится потенциальной жертвой. При этом вредоносная программа обнаруживает и обходит песочницы сред CI/CD, что делает бесполезным сканирование только на этапе сборки. Для выявления заражения необходимо отслеживать сетевые подключения к блокчейн-интерфейсам и нестандартные запросы WebSocket с рабочих станций разработчиков.
Таким образом, кампания Void Dokkaebi демонстрирует новый тип угрозы: самораспространяющаяся атака на цепочку поставок, основанная не на уязвимостях программного обеспечения, а на доверии к инструментам и коллегам. Один скомпрометированный разработчик запускает цепную реакцию, которая без дополнительных усилий со стороны атакующих охватывает личные, корпоративные и открытые репозитории. Организациям, рассматривающим рабочие станции разработчиков и процессы работы с репозиториями как часть поверхности атаки, будет легче обнаружить и заблокировать эту угрозу до того, как она распространится на всю экосистему.
Индикаторы компрометации
IPv4
- 166.88.4.2
- 23.27.120.142
IPv4 Port Combinations
- 136.0.9.8:443
- 154.91.0.196:443
- 198.105.127.210:443
- 23.27.20.143:27017
- 23.27.202.27:27017
- 83.168.68.219:27017
- 85.239.62.36:27017
Domains
- 260120.vercel.app
- cgbrandh.short.gy
- chvsvr.short.gy
- codeviewer-three.vercel.app
- coreviewer.vercel.app
- data-kappa.vercel.app
- davhub88.vercel.app
- default-configuration.vercel.app
- default-configuration-sandy.vercel.app
- ext-checkedin.vercel.app
- gurucooldown.short.gy
- isvalid-regions.vercel.app
- lackservice.short.gy
- PEsnCV.short.gy
- regioncheck.xyz
- tailwind-version-4.vercel.app
- task-hrec.vercel.app
- thopywork.vercel.app
- vscode-bootstrapper.vercel.app
- vscode-config.vercel.app
- vscode-config-setting.vercel.app
- vscode-config-settings.vercel.app
- vscode-extension-260120.vercel.app
- vscode-extensions-bootstrap.vercel.app
- vscode-ext-git.vercel.app
- vscode-helper171.vercel.app
- vscode-helper171-ruby.vercel.app
- vscode-production-setting.vercel.app
- vscode-settings-bootstrap.vercel.app
- vscode-settings-config.vercel.app
- vscode-settings-config-md.vercel.app
- vscode-toolkit-settings.vercel.app
SHA256
- 23e37cf4e2a7d55ed107b3bc3eb7812a0e3d8f90b23b0c8f549d5c10d089a2c8
- 834a92277f1bd82d4d473ac0aa2ddb23208a3a8763a576b882e7326c42bc5412
Tron Wallet
- TA48dct6rFW8BXsiLAtjFaVFoSuryMjD3v
- TXfxHUet9pJVU1BgVkBAbrES4YUc1nGzcG
- TMfKQEd7TJJa5xNZJZ2Lep838vrzrs7mAP
Aptos Wallet
- 0x533b2dbcaeff19cd1f799234a27b578d713d8fcaa341b7501e4526106483e0b1
- 0x3f0e5781d0855fb460661ac63257376db1941b2bb522499e4757ecb3ebd5dce3
- 0xbe037400670fbf1c32364f762975908dc43eeb38759263e7dfcdabc76380811e