Два троянизированных пакета npm — bianira-ui и fluid-type-ui — вытаскивали IP-адрес командного сервера не из кода и не из смарт-контракта, а из адреса получателя пустой Ethereum-транзакции. Для разработчиков это плохая новость: блокчейн как закладка для C2 стал дешевле, тише и заметно менее удобным для мониторинга.
Пакеты сняли с npm после сотен загрузок
О находке написал The Hacker News со ссылкой на исследование OpenSourceMalware. Речь идет о версиях bianira-ui@1.27.0 и fluid-type-ui@2.0.8, опубликованных 28 июля 2026 года. До удаления с npm первый пакет успели скачать 109 раз, второй — 587 раз. Их опубликовали аккаунты npmuser1101 и npmuser3002.
OpenSourceMalware относит активность к северокорейской кампании Contagious Interview. Это важная деталь не ради геополитики, а ради практики: такие операции давно охотятся именно на разработчиков, потому что один зараженный ноутбук или один скомпрометированный сборочный контур CI могут открыть дорогу к токенам, приватным репозиториям и внутренним пакетным зеркалам.
NullReceiver кодирует C2 прямо в адресе перевода
Новая техника получила название NullReceiver. Логика такая: вредоносный пакет берет жестко заданный кошелек атакующего, находит его последнюю исходящую транзакцию, читает адрес получателя и превращает первые четыре байта этого адреса в IP. В исследовании так получили адрес 166.88.134[.]62.
Адрес получателя здесь не нужен как настоящий кошелек. Он работает как носитель данных. В разобранном примере адрес 0xa658863ea658863e68656c6c6f6970626f742121 давал не только IP, но и хвост helloipbot!! в ASCII. Сами исследователи называют эту схему «осознанным улучшением EtherHiding».
Главное отличие от EtherHiding
Предыдущие блокчейн-C2-схемы вроде EtherHiding обычно прятали указатель на сервер в данных транзакции или в смарт-контракте. У защитников оставался хотя бы стабильный ориентир: контракт, адрес сжигания или заметная полезная нагрузка в поле calldata. NullReceiver убирает и этот след.
Вместо контракта здесь нулевой перевод без суммы и без данных. Для атакующего это дешевле по комиссии и менее заметно в блокчейн-телеметрии. Для защитника хуже другое: исчезает постоянный адрес, за которым удобно следить еще до того, как образец малвари попал в руки аналитика.
У техники есть и ограничение: в адрес получателя много не упакуешь. Поэтому NullReceiver подходит скорее для короткого указателя вроде IP-адреса, а не для полного URL или скрипта. Но для первичного выхода на C2 этого уже достаточно.
Что это меняет для команд разработки
Для команд в России и СНГ вывод довольно приземленный: одного npm audit здесь мало, потому что речь не об известной уязвимости, а о заведомо вредоносной библиотеке. Если у компании есть внутренний npm-прокси, автоматические сборки и привычка быстро подтягивать малоизвестные библиотеки интерфейса, такой сценарий вполне рабочий и без громких ярлыков про госхакеров.
Практический минимум выглядит так: фиксировать версии зависимостей, ограничивать установку новых пакетов без проверки, следить за неожиданными обращениями сборочных машин к публичным Ethereum RPC-узлам вроде 1rpc.io и eth.drpc.org, а также отдельно разбирать любые зависимости с короткой историей загрузок и размытым описанием. В атаках на цепочку поставок ПО дешевый пакет-подделка до сих пор работает лучше, чем многие сложные эксплойты.
Источники: The Hacker News, OpenSourceMalware.
Похоже, следующая эволюция атак на открытые зависимости будет не громче, а тише: меньше артефактов в коде, больше логики в публичной инфраструктуре, которую нельзя просто выключить одной жалобой хостеру.