Трояны в npm прячут адрес C2 в получателе пустой Ethereum-транзакции

Исследователи OpenSourceMalware обнаружили в npm два троянизированных пакета — bianira-ui и fluid-type-ui, которые получают адрес командного сервера из адреса получателя пустой Ethereum-транзакции. Пакеты, опубликованные 28 июля 2026 года, были скачаны 109 и 587 раз соответственно, после чего стали недоступны в npm.
Метод получил название NullReceiver. Активность связывают с Северной Кореей. Он развивает подход EtherHiding, при котором вредоносные данные размещались в блокчейне, но меняет способ хранения указателя на управляющую инфраструктуру.
Как NullReceiver извлекает адрес сервера
В коде библиотек зашит кошелёк атакующих: 0xa322e5f3d311d3080e6f0121063e9adc2490ef1a. Вредоносный компонент находит его последнюю исходящую транзакцию, читает поле получателя и переводит первые четыре байта шестнадцатеричного адреса в десятичный IPv4-адрес.
В изученной цепочке адрес получателя был 0xa658863ea658863e68656c6c6f6970626f742121. Первые четыре байта a658863e декодируются в 166.88.134.62, к которому затем подключается библиотека. Остальная часть адреса содержит ASCII-строку helloipbot!!.
С 27 июля 2026 года с этим кошельком зафиксировано 68 транзакций, и у всех указан одинаковый адрес To. При этом пакеты не вызывают смарт-контракт и не используют поле calldata: вся необходимая для подключения информация извлекается непосредственно из байтов адреса получателя.
Чем подход отличается от EtherHiding
Guardio Labs публично описала EtherHiding в октябре 2023 года. Техника позволяла прятать вредоносный код в смарт-контрактах Ethereum или BNB Smart Chain. Google Threat Intelligence Group связывала её использование северокорейскими группами с кампанией Contagious Interview, где жертв заманивают предложениями работы через LinkedIn и просят выполнить тестовое задание.
NullReceiver не переносит полный URL или скрипт: адрес способен вместить лишь несколько байтов. Но ему не нужны контракт и данные в calldata. OpenSourceMalware отмечает, что пустой перевод обходится дешевле, поскольку calldata тарифицируется за байт, а также не оставляет отдельного поля с полезной нагрузкой для сопоставления.
Для команд безопасности это продолжение темы заимствованного доверия в кибербезопасности: доверие к привычному компоненту цепочки поставки не исключает скрытого канала управления. При проверке npm-зависимостей стоит анализировать код на обращения к блокчейн-провайдерам, чтение истории кошельков и преобразование байтов адресов в сетевые индикаторы.
Практический вывод
Организациям следует учитывать, что блокчейн-транзакция без суммы и данных тоже может участвовать в доставке конфигурации вредоносного ПО. Контроль зависимостей, изоляция сборочных сред и мониторинг необычных исходящих соединений помогут заметить такую логику до подключения приложения к управляющему серверу.

