Исследовательская группа Socket Threat Research обнаружила масштабную кампанию кибершпионажа, связанную с северокорейскими государственными хакерами. Злоумышленники систематически размещают вредоносные пакеты в реестре npm, используя тактику социальной инженерии против разработчиков криптовалютных и блокчейн-проектов.
Описание
Согласно отчету, с момента предыдущего обновления 14 июля 2025 года было выявлено 338 вредоносных пакетов, которые суммарно скачали более 50 000 раз. На момент публикации исследования 25 пакетов оставались активными в реестре npm. Исследователи направили запросы на удаление опасного кода и приостановку associated учетных записей издателей.
Кампания получила название Contagious Interview (заразительное интервью) из-за характерного метода атаки: злоумышленники представляются рекрутерами в LinkedIn и предлагают жертвам выполнить тестовое задание, содержащее вредоносные зависимости. Целями становятся разработчики в сфере Web3, криптовалют и блокчейна, а также соискатели технических вакансий.
Технический анализ показал эволюцию инструментария хакеров. Изначально использовались прямые дропперы вредоносного ПО BeaverTail, но теперь злоумышленники перешли к более сложным загрузчикам HexEval, XORIndex и зашифрованным модулям. Каждый пакет выполняет код при установке или импорте, восстанавливает обфусцированный BeaverTail в памяти и загружает бэкдор InvisibleFerret для обеспечения постоянства.
Особенностью кампании является волнообразный и итеративный характер. Хакеры регулярно публикуют новые пакеты с опечатками в названиях (typosquatting), модифицируют код загрузчиков и масштабируют дистрибуцию через новые псевдонимы. Было зафиксировано использование более 180 фальшивых личностей, связанных с новыми npm-алиасами и регистрационными email-адресами, а также более десятка командных серверов.
В текущей волне атаки используются названия, похожие на популярные зависимости, которые разработчики часто устанавливают автоматически: epxreso (вместо express), dotevn (вместо dotenv), boby_parser (вместо body-parser) и другие. Также targeted пакеты для Web-разработки: react-router-html, vite-plugin-react-ping и аналоги.
Эксплуатация начинается в момент выполнения кода злоумышленника на машине жертвы. В этой кампании исполнение является пользовательским, а не уязвимостью. Установка или импорт активируют логику хакеров через npm lifecycle hooks, такие как postinstall, или через entry points, которые выполняют код при загрузке модуля.
Исследователи обнаружили проблемы в механизмах безопасности npm registry. Например, alias anarenhsaihan опубликовал два вредоносных пакета: jito-components (уже удален и заменен security holding page) и components-flexibility (оставался активным на момент написания отчета). Несмотря на удаление первого пакета, учетная запись хакера не была приостановлена, что позволило опубликовать второй вредоносный пакет.
Установка вредоносных пакетов напоминает матрешку: небольшой загрузчик запускается первым, восстанавливает BeaverTail в памяти, после чего BeaverTail загружает и активирует бэкдор InvisibleFerret. Новые зашифрованные загрузчики используют AES-256-CBC с жестко заданными ключами и векторами инициализации, храня зашифрованный текст в файлах типа LICENSE.
BeaverTail устанавливает командное управление через HTTP(S) и WebSocket, регистрирует хост, получает задания и подготавливает InvisibleFerret - кроссплатформенный Python-бэкдор для Windows, macOS и Linux. Инфраструктура смешивает raw IP-адреса на коммерческих VPS с легитимными hosting-платформами типа *.vercel.app для маскировки под developer-трафик.
Основные цели кампании - кража криптовалют и сохранение постоянства для дальнейших атак. По независимым оценкам, северокорейские хакеры уже похитили $2 миллиарда в 2025 году и approximately $1.34 миллиарда в 2024 году. Украденные активы обычно проходят через миксеры, cross-chain свопы и сети с низкой видимостью.
Эксперты прогнозируют дальнейшее развитие кампаний: появление новых вариантов загрузчиков, разделение расшифровки и размещение между файлами для обхода статических сканирований, продолжение повторного использования URL-шаблонов и хостинг-платформ. Рекомендуется усиливать контроль на уровне учетных записей, требовать двухфакторную аутентификацию и проверку происхождения кода, применять пре-публикационное сканирование.
Для защиты рекомендуется рассматривать каждую установку npm как выполнение кода и блокировать risky behavior до попадания на developer-машины или в CI/CD-пайплайны.
Следует сканировать код и запросы (pull requests) на включение в самом начале, требовать чистый отчет перед слиянием и проверять внешние библиотеки на происхождение, безопасность для сопровождающего и зафиксированные версии.
Интеграция специализированных инструментов безопасности в конвейеры разработки помогает активно выявлять и предотвращать конкурентные ПО, снижая подверженность атакам в цепочке поставок, таким как «заразительное интервью».
Индикаторы компрометации
IPv4
- 135.181.123.177
- 138.201.50.5
- 144.172.105.235
- 144.172.112.106
- 146.70.253.107
- 23.127.202.249
- 23.227.202.244
URLs
- http://fashdefi.store:6168/defy/v7
- https://0927.vercel.app/api/ipcheck
- https://api.npoint.io/b964566497d98298d32c
- https://ip-check-server.vercel.app/api/ip-check/208
- https://json-project-hazel.vercel.app/apikey/QWERTYU890T12HML
- https://log-server-lovat.vercel.app/api/ipcheck/703
- https://process-log.vercel.app/api/ipcheck
- https://process-log-update.vercel.app/api/ipcheck
Emails
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
Malicious npm Packages
- alchmey-sdk
- alert-codestreamer
- async-chai
- babel-cli-ganache
- bind-error
- bingo-abstract-transport
- bingo-log
- bingo-logger
- bingo-pretty
- boby_parser
- btrez-logger
- case-sensitive-paths
- chai-utils
- chartable-utils
- checking-ip
- checking-ips
- chunk-logger
- colorful-buttons
- common-js-support
- common-logify
- components-flexibility
- config-log
- cookie-logger
- cookie-loggers
- cookie-loggo
- cookie-parsing
- cookies-logger
- cors-validator
- cross-session
- ddok-escapes
- display-notifications
- dotevn
- dragon0905-vite-tsconfig-assistant
- emittery-up
- epxreso
- epxresso
- epxressoo
- err-notification
- error-analysis
- error-fallback
- error-loggerjs
- eslint-config-detector
- eslint-detector
- eslint-logger
- eslint-plugin-react-purify
- eslint-ts-view
- eslint-validation-cli
- eslints-logger
- eth-node-utils
- etherres
- ethres.js
- ethrs.js
- express-prisma
- express-xmlrequest
- file-uploading-advance
- filigrean-icon
- filigren-icon
- filigron-icon
- filiogrean-ico
- financial-utils
- flowhint
- flowico
- flowmint
- foudry
- foundary
- foundrey
- foundri
- frontend-cron
- func-analys
- func-analyst
- func-analysis
- func-logger
- fundry
- gad-logger
- ganac
- ganacche
- ganacha
- ganachee
- ganachhe
- gannache
- gatepass
- glow-admin
- gnach
- gridmind
- hardhat-deploy-notification
- hardhat-deploy-notifier
- hashsentinel
- http-err-notification
- http-helmet
- http-req-logger
- httpreslog
- httpreqlog
- husky-es
- husky-logger
- icon-sea
- ip-checkers
- ip-checking
- ip-checks
- item-box
- jito-components
- jnscript
- js-notifiers
- json-configs
- json-confs
- json-log-stream
- json-weqjoken
- json-webhooks
- jsonlise-conf
- jsons-logger
- jsonstylizer
- layzr
- log-task
- log4action
- logger-cookie
- logger-extjs
- logger-pino
- logging-winston
- logflow-json
- login-tokenizer
- lovable-ci
- lovable-cli
- lovable-cookie-logger
- lovable-cookies-logger
- lovable-js
- lovable-logger
- lovable-loggers
- lovable-react
- lovable-ts
- luma-glow-db
- matrix-charts
- mega-compress
- metamask-api
- middleware-loggers
- mongodb-cd
- mongodb-ci
- mongodb-orn
- mongose-ci
- mongose-cli
- morgan-logger
- motionflow
- mongoose-ci
- muxflux
- my-ttt
- next-plugin-uni-i18n
- nextjs-babel-toastify
- node-log-config
- node-log-stream
- node-logflow
- node-logger-sdk
- node-loggerx
- node-notifications
- node-nvm-ssh
- node-orm-logger
- node-vite-config
- node-winston
- node-winston-logger
- nodeapi-json
- nodemailer-helper
- nodemon-pkg
- nodelog-lite
- nodespode
- notification-clients
- notification-displayer
- notification-layer
- notifications-client
- notifications-layer
- notifications-log
- orbital-ledger
- parse-logger
- parser-session
- parser-tson
- pino-node
- pixzen
- preset-log
- prepare-config
- prettier-utils
- pretty-format-setting
- proc-log-cmd
- proc-log-error
- process-load
- qrcode-pretty-react
- query-logger
- randly
- rc-logger
- react-babel-purify
- react-context-stylizer
- react-copack
- react-content-provider
- react-dhtml
- react-dropzone-log
- react-eslint-type
- react-fs-cofnig
- react-fs-config
- react-hook-eslint
- react-icons-loader
- react-lovable
- react-milton
- react-outcome-error-alert
- react-prop
- react-repack
- react-redux-stylizer
- react-redirect-router
- react-router-html
- react-router-purify
- react-stylizer
- react-tediter
- react-thunk-log
- react-toast-ui
- real-socket-rt
- recharts-smart
- redux-eslint-saga
- redux-lint-saga
- redux-saga-devtool
- redux-saga-guard
- redux-saga-help
- redux-saga-inspector
- redux-saga-sentinel
- redux-saga-validator
- redux-thunk-action
- redux-toolkit-rts
- request-guard
- request-kraken
- request-sentry
- router-kit
- rtk-log
- rtk-logger
- rtk-service
- rtk-sleep
- rtk-wake
- safe-winston
- sensitive-paths-focus
- session-logger
- sessionfiy
- sessions-logger
- simple-icon-maker
- some-promise
- stake-config
- stream-loggers
- strictor
- succgdess
- tai1wind-configs-viewer
- tailwind-beauty-icon
- tailwind-book-icon
- tailwind-class-overrides
- tailwind-classname-overrides
- tailwind-classes-overrides
- tailwind-color-icon
- tailwind-computer-icon
- tailwind-config-overrides
- tailwind-config-setting
- tailwind-configs
- tailwind-configs-viewer
- tailwind-cup-icon
- tailwind-desktop-icon
- tailwind-glass-icon
- tailwind-icon
- tailwind-icon-animate
- tailwind-mouse-icon
- tailwind-mui-modal
- tailwind-nbr-icon
- tailwind-next-icon
- tailwind-react-icon
- tailwind-react-mui
- tailwind-round-icon
- tailwind-scrollbar-show
- tailwind-scrollmenu
- tailwind-style-components
- tailwind-style-overrides
- tailwind-supabase
- tailwind-theme-colors
- tailwindcss-animatexs
- tailwindcss-animators
- tailwindcss-color-icons-lite
- tailwindcss-config-overrides
- tailwindcss-remotion
- theta-tv-charts
- tjsontype
- trslip
- truflee
- truffel
- tsleep
- uidraftism
- uxlift
- uxline
- vaildator
- viam
- vite-audit-plugin
- vite-auditlog
- vite-babel-plugin-es6-promise
- vite-binding-js
- vite-chunk-tools
- vite-chunk-manager
- vite-configs-viewer
- vite-css-icon
- vite-jsconfig
- vite-lightsparse
- vite-linting-js
- vite-log-plugin
- vite-logeidit
- vite-mobcss-log
- vite-next-logger
- vite-next-loggers
- vite-parse
- vite-plugin-chunk-chop
- vite-plugin-es6-babel
- vite-plugin-js-support
- vite-plugin-morgan
- vite-plugin-opticompress
- vite-plugin-parse
- vite-plugin-parse-js
- vite-plugin-parse-json
- vite-plugin-react-ping
- vite-plugin-reactjs-refresh
- vite-plugin-uni-i18n
- vite-plugin-vue-layout
- vite-postcss-bootstrap
- vite-postcss-helper
- vite-postcss-kit
- vite-postcss-nested
- vite-react-chunker
- vite-simpleparse
- vite-singleparse
- vite-ts-icon
- vite-tsauditlog
- vite-tsconfig-assistant
- vite-tsconfig-optimized
- vitejs-plugin-react-refresh
- vortex-logger
- vvite-plugin-react-ping
- wb3.js
- we3.js
- webpack-css-branch-loader
- winstem-logging
- winston-datalog
- winston-log
- x-session-parser
- xml-request-parser
- tailwindcss-theme-icons