Кампания PolinRider расширилась на экосистемы Go, Packagist и Chrome: 162 вредоносных артефакта

information security

Исследователи компании Socket выявили масштабную активность северокорейской группировки, связанной с кластером Contagious Interview / Famous Chollima. Кампания, получившая обозначение PolinRider, изначально была сосредоточена на репозиториях npm, но теперь охватила дополнительные экосистемы с открытым исходным кодом. На момент публикации зафиксировано 162 вредоносных артефакта в 108 уникальных пакетах, включая следы компрометации в 80 модулях Go, 10 пакетах Packagist и одном расширении для Chrome. Угроза остаётся активной: злоумышленники продолжают взламывать учётные записи мейнтейнеров, модифицировать легитимные репозитории и публиковать заражённые версии пакетов везде, где у них есть доступ к реестру.

Описание

Основные методы атакующих остаются неизменными на протяжении всей кампании. Злоумышленники внедряют обфусцированные загрузчики на JavaScript в легитимные репозитории, скрывая код с помощью отступов пробелами или поддельных шрифтовых файлов .woff2. Запуск вредоносной нагрузки осуществляется через средства разработчика, в частности через файлы задач VS Code. Для маскировки изменений атакующие переписывают историю Git с помощью форсированных отправок и антидатированных коммитов, чтобы вредоносные правки выглядели более старыми и менее подозрительными. Такой подход делает стандартную страницу репозитория на GitHub и видимую историю коммитов ненадёжными индикаторами компрометации. Специалистам по безопасности рекомендуется проверять журналы активности репозитория, метаданные релизов пакетов, конфигурации задач VS Code и подозрительные изменения в конфигурационных файлах.

После деобфускации полезная нагрузка представляет собой загрузчик вредоносного ПО на JavaScript, который обращается к блокчейн-инфраструктуре и публичным RPC-сервисам, включая сети TRON, Aptos и BNB Smart Chain. Загрузчик получает зашифрованный материал второй стадии, расшифровывает его с помощью встроенных XOR-ключей и выполняет результат через eval(). Среди наблюдаемых полезных нагрузок - DEV#POPPER и OmniStealer, однако архитектура загрузчика означает, что кампания может доставлять и другие вредоносные программы.

Отчёт Socket показывает, что атакующие часто компрометируют аккаунты мейнтейнеров на GitHub, возможно, через захват просроченных доменов или другие методы восстановления доступа. Один из характерных примеров - учётная запись Xpos587. Несколько репозиториев, поддерживаемых этим пользователем, были изменены в одинаковом узком временном окне 23 июня в 10:00 UTC. Такая синхронизация вряд ли является обычной активностью мейнтейнера и указывает на компрометацию аккаунта с последующим массовым изменением репозиториев. В репозитории Xpos587/markfetch стандартный просмотр файлов GitHub выглядит безобидным - коммиты датированы месяцами ранее, сообщения похожи на рутинное обслуживание. Однако во вкладке Activity видна недавняя форсированная отправка, которая изменила историю коммитов. Таким образом, главная страница репозитория создаёт ложное впечатление, что ничего не менялось, в то время как лог активности раскрывает модификацию более старых коммитов с внедрением вредоносной нагрузки. Атакующие использовали этот доступ для публикации вредоносных версий Go-модулей от имени Xpos587.

Другое направление экспансии - экосистема Packagist. Под пространством имён sevenspan, принадлежащим организации 7span, были обнаружены скомпрометированные пакеты. Мейнтейнеры заметили часть атаки и удалили поддельные шрифтовые файлы .woff2 из репозиториев и пакетов. Однако очистка оказалась неполной: хотя шрифтовые полезные нагрузки были обнаружены и удалены, обфусцированный JavaScript, спрятанный в конфигурационных файлах (например, vite.config.js), остался в некоторых репозиториях. Это показывает, что устранение только одного метода сокрытия может пропустить другие варианты, используемые той же кампанией. В данном случае вредоносный код был добавлен с антидатированными коммитами от 8 января, а удаление произошло 16 мая. При этом соответствующих вредоносных npm-релизов от этой организации не наблюдалось - вероятно, атакующим не удалось получить учётные данные для публикации в npm.

Техника сокрытия нагрузки варьируется: в более ранних случаях вредоносный код прятали в конфигурационных файлах (*config.js), в более поздних - внутри поддельных .woff2-файлов с запуском через задачи VS Code. Например, файл .vscode/tasks.json определяет скрытую задачу, выполняемую при открытии папки, которая запускает поддельный шрифтовой файл Node.js - таким образом статический актив превращается в точку входа для загрузчика. Оба метода встречаются в скомпрометированных репозиториях учётной записи Xpos587.

Для команд, которые установили затронутые версии пакетов или расширений, необходимо считать среду потенциально скомпрометированной. PolinRider нацелена на окружение разработчиков и может раскрыть учётные данные реестров пакетов, исходного кода, облачных сервисов, CI/CD-систем. Поэтому восстановление следует проводить с чистого компьютера, а не с потенциально заражённого хоста. Рекомендуется сохранить судебные артефакты до очистки, выявить все машины разработчиков, на которых были установлены заражённые версии, удалить их и пересобрать окружение из известных корректных lock-файлов. Следует выполнить ротацию всех секретов, которые могли быть скомпрометированы (npm, GitHub, PyPI, RubyGems, облачные токены, Vault, Kubernetes, Docker, SSH, Slack, Twilio, CI/CD), с чистого устройства. Также необходимо проверить машины разработчиков на наличие задач VS Code с опцией runOn: folderOpen, особенно тех, которые запускают файлы с нестандартными расширениями (например, .woff2 через node). Репозитории GitHub стоит аудитировать на подозрительные коммиты, изменяющие .vscode/tasks.json, config.js, vite.config.js, eslint.config.js или файлы в каталогах шрифтов/статических активов. При анализе следует обращать внимание на журналы активности GitHub, а не только на видимую историю коммитов, так как PolinRider использует переписывание истории, чтобы сделать вредоносные изменения менее заметными. Наконец, необходимо проверять историю публикаций пакетов в реестрах на предмет неожиданных релизов после модификации репозиториев.

Кампания PolinRider продолжается, и Socket фиксирует свежие компрометации, вредоносные версии пакетов и расширения, связанные с этой угрозой. Поскольку атакующие регулярно взламывают легитимные репозитории и расширяют охват экосистем, в будущем неизбежно появление новых заражённых артефактов.

Индикаторы компрометации

Latest Wave: Accounts, Namespaces, Repositories

  • Xpos587 — GitHub account
  • Xpos587/git2md
  • Xpos587/markfetch
  • Artiffusion-Inc/mirofish
  • sevenspan — Packagist namespace
  • 7span — GitHub organization
  • 7span/react-list

Chrome

  • nafkmlanpinblehjeebdjaolelielbgc 1.0.1
  • nafkmlanpinblehjeebdjaolelielbgc 1.0.2

Composer

  • plusinfolab/logstation dev-dependabot/github_actions/ramsey/composer-install-4
  • plusinfolab/logstation dev-master
  • roberts/leads 2.0.0
  • roberts/leads 2.0.1
  • roberts/leads 2.0.2
  • roberts/leads 2.0.3
  • roberts/leads 2.1.0
  • roberts/leads 2.1.1
  • roberts/leads 2.1.2
  • roberts/leads 2.1.3
  • roberts/leads 2.1.4
  • roberts/leads dev-drewroberts/feature/test-case
  • roberts/leads dev-main
  • sevenspan/code-generator dev-feat/livewire-version-update
  • sevenspan/code-generator dev-feat/migration-message
  • sevenspan/code-generator dev-feat/notification-blade-file-support
  • sevenspan/code-generator dev-feat/resource-collection-changes
  • sevenspan/code-generator dev-fix/data-type-mapping
  • sevenspan/code-generator dev-fix/feedback
  • sevenspan/code-generator dev-fix/generator-path-and-migration-table-name
  • sevenspan/code-generator dev-hotfix/vitepress-setup
  • sevenspan/code-generator dev-master
  • sevenspan/code-generator dev-update/notification-modal
  • sevenspan/laravel-chat dev-ability-to-encrypt-body
  • sevenspan/laravel-chat dev-feat/doc
  • sevenspan/laravel-chat dev-feat/message-variables
  • sevenspan/laravel-chat dev-feat/php-version-upgrade
  • sevenspan/laravel-chat dev-imp/message-type
  • sevenspan/laravel-chat dev-main
  • sevenspan/laravel-whatsapp dev-dev
  • sevenspan/laravel-whatsapp dev-feat/doc
  • sevenspan/laravel-whatsapp dev-imp-message-template-api
  • sevenspan/laravel-whatsapp dev-master
  • sevenspan/laravel-whatsapp dev-upgrade/laravel-9-to-10
  • thiio/kubernetes-php-sdk dev-main
  • adxio/twig-hmvc dev-master
  • arsl/optima-class dev-auction-added
  • lambda-platform/moqup dev-master
  • olc/olc-php dev-fix/remove-malware
  • plusinfolab/logstation dev-dependabot/github_actions/actions/checkout-6
  • plusinfolab/logstation dev-dependabot/github_actions/dependabot/fetch-metadata-3.1.0

Go

  • github.com/almamuncsit/golang v0.0.0-20201007062155-5cdeaac96310
  • github.com/amantsehay/a2sv-go-course v0.0.0-20240816090215-c51e2d9214d5
  • github.com/anatoli-derese/a2sv-excercise v0.0.0-20240805074755-5adbbc600635
  • github.com/backtesting-org/live-trading v0.0.0-20260115064332-bb2565d7c4f3
  • github.com/Barsu5489/commerce v0.0.0-20231123164829-2eb351369e57
  • github.com/barsu5489/linked-list v0.0.0-20231201174326-3afac3ca2eb0
  • github.com/bm-197/chill v0.0.0-20241216030053-8573b6044fba
  • github.com/bm-197/golang-experiments v0.0.0-20241027190820-c15ae64e0db9
  • github.com/bm-197/tessera v0.2.2-0.20260620182348-249a9f8e3724
  • github.com/dexbotsdev/uniswap-v2-v3-arbitrage v0.0.0-20231007040503-7b0a4d1c503d
  • github.com/dpkkmishra/caddy-auth-jwt v0.0.0-20210129140145-baa17c28bb69
  • github.com/dpkkmishra/caddy-jwt-test v0.0.0-20210128080632-51533b48e191
  • github.com/emmadedayo/gobasic v0.0.0-20220825235155-ad63d73f0d4b
  • github.com/Faisal-Sha/gumus-task-grok v0.0.0-20250429214115-ea933993f32e
  • github.com/glacialspring/go-winsparkle v0.0.0-20250402002608-ba5501b8ba90
  • github.com/glacialspring/intfloatmap v0.0.0-20200910185150-4f0bad56dbde
  • github.com/glacialspring/static v0.0.0-20181015024211-023dc73bc332
  • github.com/hammad-umar/go-movies-api v0.0.0-20230326212238-15c318053725
  • github.com/hngi/team-fierce-backend-golang v0.0.0-20200612135333-4f82269a0a14
  • github.com/ibitolamayowa/zurichatbot v0.0.0-20211001223842-c3b478092c01
  • github.com/khunhai1/gophertictactoe v0.0.0-20250120223649-bb0aaa2267cb
  • github.com/lambda-platform/dan v0.0.0-20221011015638-695b34fb98d4
  • github.com/lambda-platform/ebarimt-rest-api v0.0.0-20230429075241-30dbb04b67f7
  • github.com/lambda-platform/lambda v0.9.16-0.20260509105729-f77ea62b54e7
  • github.com/lambda-platform/lambda v0.9.19-0.20260525032942-0cf995e71697
  • github.com/lambda-platform/lambda v0.9.20-0.20260619012358-12b5a6e0c244
  • github.com/lanvige/mixin-sdk v0.0.0-20190708104953-94705be98406
  • github.com/lushiv/jwt-authentication-go-gin v0.0.0-20220928063611-af2bd4af5f3b
  • github.com/MooooonStar/ant v0.0.0-20190107144159-65b2cc21dafc
  • github.com/mooooonstar/red-or-black v0.0.0-20191225051109-9fe850cfd716
  • github.com/MooooonStar/testmod v0.0.0-20190628084721-ec3bb9be7c6e
  • github.com/mooooonstar/toychain v0.0.0-20191116134239-90e0fe69e98f
  • github.com/mprogrammer2020/snipper-bot-uniswap v0.0.0-20240321075156-da0461f0b224
  • github.com/naol7/dist-task-scheduler v0.0.0-20241120175214-0365b36af82f
  • github.com/natib21/go-lang v0.0.0-20241114084852-ed44c0923802
  • github.com/nizigama/linux-server-monitor v0.0.0-20260621053908-5589422c4b0b
  • github.com/opentoolbox-gh/golang-json-base v0.0.0-20230725095910-11c8fd8ed6a8
  • github.com/PaccyC/myStrings v0.0.0-20240306115915-1df6cd5cd48a
  • github.com/PedroCost4/Learningv0.0.0-20230918010911-3797c964773d
  • github.com/rafiquecudjoe/go-basics v0.0.0-20240911151030-82e62419e8a0
  • github.com/rajpdus/MeetingSummarizer v0.0.0-20230417063422-1ac2ec17a921
  • github.com/reauheau/goaubio v0.0.0-20260213144826-0c7c4a5b5859
  • github.com/re-gis/bms_api v0.0.0-20231012193242-a54ae8034b93
  • github.com/re-gis/gin-commerce v0.0.0-20241005074154-8a71e84cc689
  • github.com/rickt/gsuitemdm v0.0.0-20200304162828-badb764bd20e
  • github.com/rickt/slack-weather-bot v0.0.0-20180704165649-55def291ce83
  • github.com/setsu548/desuna-payment-platform v0.0.0-20240422135415-4c1a671f387f
  • github.com/setsu548/logistic v0.0.0-20240410002038-5b40bed74f90
  • github.com/shariyershazan/golang-fiber-api-prac v0.0.0-20251106153325-6b6a12627f77
  • github.com/telexintegrations/ekefan-v0.0.0-20250223110202-e913aed9ff04
  • github.com/telexintegrations/grafana-loki-monitor v0.0.0-20250224081948-7824bd3a0404
  • github.com/telexintegrations/grafana-loki-monitor v0.0.0-20250224081948-90453c1b5135
  • github.com/telexintegrations/telex-cve-monitor v0.0.0-20250222191817-7fdcc417ea83
  • github.com/TheCodeGhinux/go-auth v0.0.0-20241025142614-3a060efba952
  • github.com/TheCodeGhinux/TaskHub v0.0.0-20260625023159-bb04c0745aa6
  • github.com/TheCodeGhinux/week-win v0.0.0-20250223115157-0ecd30fba704
  • github.com/The-iyed/mangomatch v0.0.0-20250529141617-38db0b6ac7d4
  • github.com/uchebuego/towncrier v0.0.0-20250926095225-5fb1ceae85a4
  • github.com/uit-21522592/golangwebdev v0.0.0-20231003153439-6b6a49e8cc93
  • github.com/workshopapps/pictureminer.api v0.0.0-20221219200451-bc99ca334525
  • github.com/Xpos587/git2md v0.0.0-20260503100027-79bdb26ca95d
  • github.com/zainirfan13/graphql-client v0.0.0-20220912215956-d304e79da123
  • github.com/zksync-sdk/zksync-sdk-v0.0.0-20211119083613-0f4260a9c8ce
  • github.com/zurichat/zc_core v0.0.0-20230228170444-4293c29813d5

NPM

  • @common-stack/generate-plugin 10.0.1-alpha.0
  • @common-stack/generate-plugin 9.0.2-alpha.21
  • @common-stack/generate-plugin 9.0.2-alpha.22
  • @common-stack/generate-plugin 9.0.2-alpha.23
  • @common-stack/generate-plugin 9.0.2-alpha.24
  • @common-stack/generate-plugin 9.0.4-alpha.0
  • @common-stack/generate-plugin 9.0.4-alpha.1
  • @common-stack/generate-plugin 9.0.5-alpha.0
  • @common-stack/generate-plugin 9.0.5-alpha.1
  • @common-stack/generate-plugin 9.0.5-alpha.2
  • @common-stack/generate-plugin 9.0.5-alpha.3
  • @common-stack/generate-plugin 9.0.5-alpha.4
  • @common-stack/generate-plugin 9.0.5-alpha.5
  • @common-stack/generate-plugin 9.0.6-alpha.0
  • @common-stack/generate-plugin 9.0.6-alpha.1
  • @modhamanish/rn-mm-template 1.1.3
  • fetch-page-assets 1.2.9
  • html-to-gutenberg 4.2.11
  • tailwind-animationbased 2.3.6
  • tailwind-animationbasis 2.3.3
  • tailwind-autoanimation 2.3.6
  • tailwindcss-animate-style 1.2.5
  • tailwindcss-style-animate 1.1.6
  • tailwindcss-style-modify 0.8.3
  • tailwindcss-style-typography 0.5.6
  • tailwindcss-style-typography 0.5.8
  • tailwindcss-typography-style 0.8.2
  • tailwind-mainanimation 2.3.3
  • tailwind-stylecss-typography 0.8.3
  • tailwind-style-typography 0.5.8
  • tailwindthml-flips 1.0.3
  • tailwindthml-flips 1.0.4
  • tailwindthml-flips 1.0.5
  • tailwind-typography-cssstyle 0.0.1-security
  • tailwind-typography-cssstyle 0.8.3
  • tailwind-typography-style 0.5.8
  • tailwind-typography-stylecss 0.8.3

Комментарии: 0