Исследовательская группа Socket обнаружила масштабную фишинговую кампанию, в рамках которой злоумышленники разместили 175 вредоносных пакетов в реестре npm, которые в совокупности набрали более 26 000 загрузок. Эти пакеты использовались как инфраструктура для целевых фишинговых атак против более чем 135 промышленных, технологических и энергетических компаний по всему миру.
Описание
Кампания, получившая название "Beamglea" по артефактам, обнаруженным во всех пакетах, использует публичный реестр npm и CDN-сервис unpkg.com для размещения скриптов перенаправления, которые перенаправляют жертв на страницы сбора учетных данных. Термин "beamglea" ранее практически не встречался в интернете, что делает его эффективным идентификатором для отслеживания данной операции. Большинство пакетов, связанных с этой кампанией, остаются активными на момент публикации отчета.
Эксплуатация цепочки поставок как фишинговой инфраструктуры
Пакеты npm сами по себе не выполняют вредоносный код при установке через npm install. Вместо этого злоумышленники эксплуатируют npm как бесплатную глобальную хостинговую инфраструктуру для фишинговых атак. Сервис unpkg.com является легальным широко используемым CDN, который автоматически обслуживает любые публичные пакеты npm через HTTPS. Злоумышленники злоупотребляют этой доверенной инфраструктурой для размещения компонентов фишинга без оплаты серверов или SSL-сертификатов.
Полная цепочка атаки выглядит следующим образом: угрозы публикуют пакеты со случайными шестисимвольными именами по шаблону redirect-[a-z0-9]{6} в npm; unpkg.com немедленно делает эти пакеты доступными через CDN-URL; злоумышленники распространяют HTML-файлы, оформленные как заказы на покупку и проектные документы; когда жертвы открывают HTML-файл, он загружает JavaScript с CDN unpkg.com; скрипт перенаправляет жертв на фишинговые страницы, которые перехватывают их учетные данные.
Экосистема npm становится невольной инфраструктурой, а не прямым вектором атаки. Разработчики, устанавливающие эти пакеты, не видят вредоносного поведения, но жертвы, открывающие специально созданные HTML-файлы, перенаправляются на фишинговые сайты.
Автоматизированная генерация пакетов
Злоумышленники разработали инструменты на Python для автоматизации всей кампании. В нескольких пакетах были обнаружены скрипты redirect_generator.py и скомпилированные с помощью PyInstaller исполняемые файлы, которые обрабатывают аутентификацию в npm, обработку шаблонов, создание пакетов, публикацию в npm и генерацию HTML-приманок.
Автоматизация принимает три входных параметра: файл шаблона JavaScript, адрес электронной почты жертвы и фишинговый URL. Затем инструмент аутентифицируется в npm, обрабатывает шаблоны, внедряя email жертвы и фишинговый URL в JavaScript, создает package.json со случайным именем, автоматически публикует как публичный пакет и генерирует HTML-приманку с ссылкой на только что опубликованный пакет через CDN unpkg.com. Эта автоматизация позволила злоумышленникам создать 175 уникальных пакетов, нацеленных на разные организации, без ручного вмешательства для каждой жертвы.
Полезная нагрузка JavaScript и фишинговые приманки
Каждый пакет содержит простой скрипт перенаправления с именем beamglea.js, который добавляет email жертвы как фрагмент URL. Фрагменты URL появляются после символа # и не отправляются на веб-серверы в HTTP-запросах, что означает их отсутствие в стандартных логах доступа к серверу. Фишинговая страница считывает email из контекста JavaScript и предварительно заполняет формы входа, создавая видимость легитимности.
Было идентифицировано более 630 HTML-файлов во всех 175 пакетах, использующих темы бизнес-документов для обхода подозрений. Все файлы расположены в выходной папке пакета. Идентификатор кампании nb830r6x появляется в мета-теге всех HTML-файлов. Имена файлов имитируют легитимные бизнес-документы: заказы на покупку, технические спецификации, проектные документы.
Инфраструктура командования и управления
Кампания использует семь фишинговых доменов, причем основная инфраструктура (51% пакетов) использует cfn.jackpotmastersdanske[.]com с путем /TJImeEKD. Вторичная инфраструктура включает musicboxcr[.]com с параметрами в кодировке base64, villasmbuva[.]co[.]mz и другие домены.
Некоторые домены используют параметры URL в кодировке base64, которые раскрывают специфику таргетинга. Параметр o365_1_nom указывает, что фишинговые страницы специально нацелены на учетные записи Office 365 без включенной многофакторной аутентификации.
Целевые отрасли и организации
Кампания нацелена на более чем 135 уникальных адресов электронной почты в более чем 100 организациях с особым вниманием к промышленному производству (35%), технологиям/электронике (20%) и энергетике/химической промышленности (15%). Географический таргетинг в основном сосредоточен в Западной Европе с дополнительным вниманием к странам Северной Европы и Азиатско-Тихоокеанскому региону. Примечательно отсутствие целей в США.
Масштабы кампании и рекомендации
Эта кампания демонстрирует, как злоумышленники используют легитимную инфраструктуру в больших масштабах. Опубликовав 175 пакетов через 9 учетных записей и автоматизировав генерацию специфичных для жертв HTML-файлов, атакующие создали устойчивую фишинговую инфраструктуру, которая ничего не стоит для размещения и использует доверенные CDN-сервисы.
Организации должны рассматривать любое обнаружение этих индикаторов компрометации как активное нарушение, требующее немедленного реагирования. Рекомендуется принудительно сбросить пароли для всех потенциально скомпрометированных учетных записей, включить MFA для всех бизнес-email и облачных сервисов, проверить логи почтовых шлюзов на наличие HTML-вложений, доставленных в период с сентября по октябрь 2025 года, и развернуть мониторинг сети для семи доменов командования и управления.
За пределами непосредственного реагирования на инциденты следует внедрить защитные меры, которые предотвращают подобные атаки. Настройте почтовые шлюзы для карантина HTML-вложений или их полного удаления, разверните фильтрацию веб-контента, которая блокирует или предупреждает о запросах к unpkg.com для пакетов, соответствующих подозрительным шаблонам, и реализуйте правила обнаружения на конечных точках для HTML-файлов в папках загрузок, которые содержат ссылки на скрипты с unpkg.com.
Индикаторы компрометации
Domains
- cfn.fejyhy.com
- cfn.fenamu.com
- cfn.jackpotmastersdanske.com
- cfn.notwinningbutpartici.com
- elkendinsc.com
- musicboxcr.com
- villasmbuva.co.mz
npm Packages
- redirect-04g1my
- redirect-0g91q6
- redirect-0vaxnw
- redirect-1akzwg
- redirect-1hvx9g
- redirect-1knxok
- redirect-1p89nj
- redirect-1st7z7
- redirect-1tokin
- redirect-1ubpyu
- redirect-1wc4gw
- redirect-24nt59
- redirect-24srjd
- redirect-297vpk
- redirect-2aie58
- redirect-3viu68
- redirect-406s9z
- redirect-47cprv
- redirect-4a6uhw
- redirect-4dcjkh
- redirect-4iyfat
- redirect-4nwrkg
- redirect-4r6ynv
- redirect-53bw0r
- redirect-57j5wb
- redirect-594t6h
- redirect-5cxzgs
- redirect-5iqds5
- redirect-5lpuku
- redirect-5r42if
- redirect-63cl4f
- redirect-6lvcjm
- redirect-7bqfg6
- redirect-7qnew0
- redirect-7vw41m
- redirect-7yqujr
- redirect-8f3x70
- redirect-8py8qs
- redirect-8ynd96
- redirect-95fl17
- redirect-9iak88
- redirect-a1gs61
- redirect-a1jnfo
- redirect-aw9itj
- redirect-b9diha
- redirect-b9fv9e
- redirect-byj4f5
- redirect-c1n05c
- redirect-ch5ayp
- redirect-ci4ynt
- redirect-cj50k2
- redirect-cn040w
- redirect-colaux
- redirect-cuvccp
- redirect-cwfpnz
- redirect-cx4vm0
- redirect-d0qfku
- redirect-dna9sd
- redirect-dravb9
- redirect-e19jye
- redirect-e761hq
- redirect-eeu53f
- redirect-elvwba
- redirect-eqtqym
- redirect-evb9wa
- redirect-ewce43
- redirect-f1wut9
- redirect-f72kyw
- redirect-fd91u6
- redirect-fhelhf
- redirect-fohapy
- redirect-fwx2y7
- redirect-g0ew1n
- redirect-g7gn31
- redirect-g7v030
- redirect-gbgbgh
- redirect-gjl674
- redirect-gzixvc
- redirect-gzkgcn
- redirect-h0i672
- redirect-h4y8f0
- redirect-hi5ag9
- redirect-ht8x82
- redirect-hx522h
- redirect-icp3vd
- redirect-igk4sd
- redirect-iocz0a
- redirect-j0rs4a
- redirect-j5blfb
- redirect-j8m62u
- redirect-jr2idt
- redirect-jw31kl
- redirect-k1jlsf
- redirect-k4s26t
- redirect-k5j1u7
- redirect-klea4q
- redirect-ksm5w7
- redirect-kz5pf4
- redirect-l0m7on
- redirect-l3td5c
- redirect-l6qi9e
- redirect-lbgja3
- redirect-ld0k2a
- redirect-lp2xe6
- redirect-ltlpoj
- redirect-lxzc6c
- redirect-m92q7h
- redirect-mop8sg
- redirect-mrdlde
- redirect-mz4116
- redirect-n06xhl
- redirect-n0c0pt
- redirect-n2wvec
- redirect-n79iht
- redirect-n95xyv
- redirect-nf0qo1
- redirect-nixl3q
- redirect-njmr1g
- redirect-noyuan
- redirect-nq70u6
- redirect-nqfhsn
- redirect-nron9d
- redirect-nuyvwk
- redirect-nzoblt
- redirect-o92d2h
- redirect-oroq43
- redirect-p8ris1
- redirect-pkkd5s
- redirect-pqigpl
- redirect-prhts6
- redirect-q2htwu
- redirect-q4vs8m
- redirect-q84l3v
- redirect-qbzqro
- redirect-qrah57
- redirect-qx2www
- redirect-r0ajvl
- redirect-r3s2jv
- redirect-rc2ewa
- redirect-rmunkl
- redirect-rrfeb9
- redirect-s7usff
- redirect-shqv6v
- redirect-sjcr8c
- redirect-sormfb
- redirect-sr2min
- redirect-sykre1
- redirect-t09ul0
- redirect-t65vz6
- redirect-t8kcsk
- redirect-u0e2q7
- redirect-ubp4cs
- redirect-uc8xfg
- redirect-udmf0u
- redirect-uplctp
- redirect-uxwcv8
- redirect-v74zee
- redirect-vlgk2c
- redirect-vpvoos
- redirect-w9cx9u
- redirect-whb6rt
- redirect-wu8gx9
- redirect-x2giv7
- redirect-x4imdv
- redirect-xgcv6j
- redirect-xi84nq
- redirect-xs13nr
- redirect-y8p47m
- redirect-ystrj5
- redirect-ytimeb
- redirect-za4566
- redirect-zbhdm7
- redirect-zfwzmc
- redirect-zoju4g
- redirect-homer-flajpt