Специалисты OpenSourceMalware обнаружили крупномасштабную кампанию по внедрению вредоносного кода в публичные репозитории GitHub. Операция, ассоциированная с северокорейской хакерской группой Lazarus, использует инфраструктуру блокчейна для организации каналов управления для удаленного доступа к зараженным системам. Атаки затронули сотни разработчиков и организаций по всему миру.
Описание
Ключевым элементом кампании выступает инструмент под названием PolinRider. Этот специализированный бэкдор внедряет обфусцированный код на языке JavaScript в файлы конфигурации популярных инструментов разработки. Вредоносная полезная нагрузка (payload) добавляется в конец таких файлов, как postcss.config.mjs, tailwind.config.js, eslint.config.mjs и next.config.mjs. Подобная маскировка делает обнаружение в ходе обычного аудита кода крайне затруднительным.
Основной вектор заражения представляет собой скомпрометированный npm-пакет. Вредоносный код активируется в процессе установки зависимостей или сборки проекта. После запуска он автоматически встраивается в корневые конфигурационные файлы проекта. Злоумышленники также опубликовали два маскирующихся безобидно пакета - tailwind-mainanimation и tailwind-autoanimation. Второй из них уже удален из реестра npm.
Согласно предоставленному анализу телеметрии, масштаб кампании быстро растет. Всего за два дня количество скомпрометированных репозиториев увеличилось со 116 до 675. Жертвами стали 352 уникальных владельца репозиториев. Из них 305 индивидуальных пользователей и 47 организаций. Особенно опасен описанный сценарий тем, что заражение не ограничивается исходным репозиторием. Вредоносное ПО распространяется на все проекты, использующие скомпрометированный открытый код. Яркий пример - популярный проект Neutralinojs. Через него вредонос разошелся по сотням пользователей и контрибьюторов.
Наиболее частота атакуемых файлов - postcss.config.mjs. На этот тип пришлось 416 заражений из 675 (примерно 62 процента). Это указывает на то, что первичным источником инфицирования стал именно скомпрометированный пакет, связанный с экосистемой PostCSS или Tailwind CSS. Меньше всего пострадали файлы app.js - всего два случая.
Техника закрепления в системе отличается высокой степенью скрытности. Полезная нагрузка проходит несколько уровней обфускации. Конечная стадия представляет собой сложный резолвер, использующий блокчейн-транзакции. Вредоносная программа опрашивает учетные записи в блокчейнах TRON, Aptos и Binance Smart Chain. Извлеченные транзакции содержат зашифрованный код, который расшифровывается с помощью XOR-ключа и исполняется через функцию eval(). Такая схема делает инфраструктуру C2 практически неуязвимой для блокировки, так как данные в блокчейне не подлежат удалению.
После внедрения в конфигурационный файл вредонос устанавливает скрипт на языке Windows Batch. Этот файл, названный tempautopush.bat, предназначен для маскировки своих действий в git-истории. Скрипт извлекает метаданные последнего коммита: дату, время, сообщение и имя автора. Затем он временно меняет системное время на это значение и выполняет команды git add и git commit --amend. Данная процедура создает измененный коммит, внешне неотличимый от оригинального. После завершения манипуляций системное время возвращается к реальному, а измененные данные принудительно отправляются на удаленный сервер с помощью git push -uf. При этом пропускаются все pre-commit и pre-push хуки.
Специалисты OpenSourceMalware отмечают, что для атак на Linux и macOS злоумышленники могли использовать аналогичные функции, однако в коде зараженных репозиториев они не оставили соответствующих инструментов. Найденный скрипт tempautopush.bat дает исследователям надежную цифровую подпись для поиска скомпрометированных систем.
Владельцам репозиториев настоятельно рекомендуется провести аудит всех JavaScript-конфигурационных файлов. Искать следует любой код, расположенный после конструкции export default или module.exports. Также необходимо проверить недавно добавленные или обновленные npm-зависимости, особенно связанные с PostCSS и Tailwind. Важно проверить каталог node_modules на наличие postinstall-скриптов. При обнаружении признаков заражения следует заменить испорченные файлы чистыми версиями, отозвать все скомпрометированные токены и ключи доступа и перейти на подписанные коммиты в будущем.
Индикаторы компрометации
Aptos Transaction Hashes (Fallback C2)
- 0xbe037400670fbf1c32364f762975908dc43eeb38759263e7dfcdabc76380811e
- 0x3f0e5781d0855fb460661ac63257376db1941b2bb522499e4757ecb3ebd5dce3
TRON Addresses
- TMfKQEd7TJJa5xNZJZ2Lep838vrzrs7mAP
- TXfxHUet9pJVU1BgVkBAbrES4YUc1nGzcG
URL
- https://fullnode.mainnet.aptoslabs.com/v1/accounts/
API Endpoint
- https://api.trongrid.io/v1/accounts/
BSC RPC Nodes
- bsc-dataseed.binance.org
- bsc-rpc.publicnode.com
YARA
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | rule rmcej_otb_payload { meta: description = "Detects rmcej%otb% shuffle-cipher JS payload injected into config files" author = "OpenSourceMalware.com" date = "2026-03-07" severity = "high" strings: $marker = "rmcej%otb%" $global = "global['!']" $seed1 = "2857687" $seed2 = "2667686" $varname = "_$_1e42" condition: $marker or ($global and $seed1) or ($varname and $seed2) } |