В реестре npm обнаружены вредоносные копии библиотеки Baileys, которые перехватывают WhatsApp-аккаунты

Атака на цепочку поставок NPM

В реестре пакетов npm выявлена кампания, нацеленная на разработчиков ботов для WhatsApp. Вредоносные версии популярной библиотеки Baileys, предназначенной для создания таких ботов, при установке незаметно подписывают аккаунт пользователя на каналы, которыми управляют злоумышленники. Некоторые пакеты добавляют рекламные ссылки в исходящие изображения и видео, а также изменяют служебные данные сообщений. Это не кража паролей, а скрытое управление авторизованной сессией.

Описание

По данным мониторинга, подтверждены 70 вредоносных пакетов на основе Baileys и 15 подделок вспомогательной библиотеки libsignal-node, отвечающей за шифрование в WhatsApp Web. Суммарно это более 340 версий. В то же время в реестре присутствует свыше 4250 пакетов с упоминанием Baileys, и большинство из них никто не анализировал. Из-за этого подтверждённый список вредоносных позиций может быть далеко не полным. Количество вредоносных пакетов продолжает расти.

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

Поведение вредоносных пакетов различается. Например, некоторые принудительно подписывают аккаунт на один фиксированный канал. Другие вставляют рекламный адрес в каждое отправляемое ботом изображение или видео. Третьи подмешивают поддельную информацию о том, что сообщение переслано из канала оператора. Четвёртые отправляют сообщение от имени пользователя, после чего блокируют работу бота. Во всех случаях действие происходит без согласия владельца, а скрытность обеспечивается за счёт штатного поведения бота. Подобные манипуляции не требуют повышенных привилегий и выполняются в рамках стандартных функций бота.

Отдельные пакеты используют удалённое управление списком целевых каналов. Код загружает перечень из внешнего источника, поэтому оператор меняет подписки без выпуска новой версии пакета. Для маскировки каждый канал переводится в беззвучный режим, чтобы владелец аккаунта не получал уведомлений. Такая схема позволяет наращивать аудиторию каналов скрыто и оперативно. Обнаружить её можно только при детальном просмотре списка каналов в настройках WhatsApp. Использование внешнего списка также означает, что злоумышленник может в любой момент расширить список каналов для всех установивших пакет.

Связь между пакетами прослеживается по общей технике, а не по единому оператору. Разные пакеты опубликованы с различных аккаунтов и разных адресов электронной почты. Это говорит о том, что действуют независимые авторы, заимствующие один и тот же приём. Подобное рассредоточение усложняет выявление всех причастных и блокировку кампании. Тем не менее использование единого метода позволяет выработать универсальные средства защиты.

Примечательно, что все вредоносные пакеты размещены под разными именами и с разными контактными данными. Это затрудняет их связывание в единую сеть. Вместе с тем анализ показывает, что техника исполнения почти идентична. Это может указывать на использование общего инструментария для генерации вредоносных версий.

Один из обнаруженных пакетов, маскирующийся под libsignal-node, был удалён из реестра до завершения анализа. Тем не менее известно, что он активировался уже при импорте библиотеки. Это означает, что заражение могло происходить ещё до запуска основного кода бота. Подобный подход расширяет потенциальную поверхность атаки, поскольку пользователь даже не успевает увидеть признаки вредоносной активности.

Цель кампании - не похищение данных, а злоупотребление чужими аккаунтами для продвижения каналов и рекламы. Скрытое использование авторизованной сессии сложнее обнаружить, чем традиционную кражу токенов. Пользователи часто не отслеживают список подписок и не замечают подмены атрибуции в исходящих сообщениях. Поэтому атака может оставаться незамеченной длительное время. В некоторых случаях страдает и репутация аккаунта, если от его имени распространяются нежелательные материалы. Даже если владелец аккаунта заметит подписку, удалить её можно только вручную, что требует времени и внимания.

Разработчикам стоит использовать только официальные релизы Baileys и внимательно проверять исходный код форков перед установкой. Полезно регулярно просматривать подписки аккаунта, на котором работает бот, и контролировать необычную активность. При подозрении на компрометацию необходимо отозвать авторизованную сессию и пересоздать её. Эти меры снижают риск несанкционированных действий.

Подобные схемы, скорее всего, будут распространяться на другие популярные библиотеки. Проверка происхождения кода и мониторинг поведения ботов становятся обязательными для тех, кто строит сервисы на открытых компонентах.

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

Domaim

  • levvicode.cloud

URL

  • https://fiora.nixel.my.id/
  • https://raw.githubusercontent.com/LevviCodeID/Levi4than/refs/heads/main/levvleys.json

Email

  • aqua193728@gmail.com
  • aryoagung321@gmail.com
  • begalwkwk@gmail.com
  • chinquepapa@gmail.com
  • mamzstoreee@gmail.com
  • myluppy46@gmail.com

Package

  • @alannxd/baileys 6.1.1
  • @alannxd/baileys 6.1.2
  • @alannxd/baileys 6.1.3
  • @alannxd/baileys 6.1.4
  • @badzz88/baileys 8.4.9
  • @bowozzz/baileys 1.0.0
  • @bowozzz/baileys 6.6.6
  • @bowozzz/baileys 6.6.7
  • @bowozzz/baileys 7.0.0
  • @bowozzz/baileys 7.0.1
  • @bowozzz/baileys 7.0.2
  • @bowozzz/baileys 7.0.3
  • @bowozzz/baileys 7.7.7
  • @bowozzz/baileys 8.8.8
  • @bowozzz/baileys 9.9.9
  • @cikikomo/baileys 1.0.0
  • @cikikomo/baileys 1.0.10
  • @cikikomo/baileys 1.0.11
  • @cikikomo/baileys 1.0.4
  • @cikikomo/baileys 1.0.5
  • @cikikomo/baileys 1.0.6
  • @cikikomo/baileys 1.0.7
  • @cikikomo/baileys 1.0.8
  • @cikikomo/baileys 1.0.9
  • @daffadeveloper/baileys 2.0.4
  • @daffadeveloper/baileys 2.0.5
  • @daffadeveloper/baileys 3.0.0
  • @daffadeveloper/baileys 7.0.0
  • @daffadeveloper/baileys 8.0.0
  • @daffadeveloper/libsignal-node 2.0.3
  • @dappaoffc/baileys 2.0.2
  • @dappaoffc/baileys 2.0.4
  • @dappaoffc/baileys 2.0.6
  • @dappaoffc/baileys-mod 4.0.2
  • @dappaoffc/baileys-mod 4.0.3
  • @dappaoffc/baileys-mod 5.0.0
  • @dappaoffc/baileys-mod 5.0.1
  • @dappaoffc/baileys-mod 5.0.2
  • @dappaoffc/baileys-mod 5.0.5
  • @dappaoffc/baileys-mod 5.0.6
  • @dappaoffc/baileys-mod 5.0.7
  • @dappaoffc/baileys-mod 6.0.11
  • @dappaoffc/baileys-mod 6.0.12
  • @dappaoffc/baileys-mod 6.0.13
  • @dappaoffc/baileys-mod 6.0.14
  • @dappaoffc/baileys-mod 6.0.15
  • @dappaoffc/baileys-mod 6.0.17
  • @dappaoffc/baileys-mod 6.0.18
  • @dappaoffc/baileys-mod 6.0.20
  • @dappaoffc/baileys-mod 6.0.21
  • @dappaoffc/baileys-mod 6.0.22
  • @dappaoffc/baileys-mod 6.0.24
  • @dappaoffc/baileys-mod 6.0.5
  • @dappaoffc/baileys-mod 6.0.8
  • @dappaoffc/baileys-mod 8.0.1
  • @dappaoffc/baileys-mod 8.0.3
  • @dappaoffc/baileys-mod 8.0.5
  • @dgxeon/libsignal-node 1.0.1
  • @dgxeon13/libsignal-node 1.0.0
  • @diezyyasha/libsignal-node 2.2.8
  • @dinzid04/baileys 0.0.1
  • @fazzcode/baileys 2.5.3
  • @fazzcode/baileys 2.5.4
  • @fazzcode/baileys 2.5.5
  • @fazzcode/baileys 2.5.6
  • @fazzcode/baileys 2.5.7
  • @fhkry/baileys 8.0.13
  • @fhkry/baileys-v2 1.0.0
  • @fhkry/x-baileys 1.0.0
  • @fhkry/x-baileys 1.1.0
  • @fhkry/x-baileys 1.2.0
  • @fhkry/x-baileys 1.3.0
  • @fhkry/x-baileys 1.4.0
  • @fhkry/x-baileys 1.5.0
  • @fhkry/x-baileys 1.6.0
  • @fhkry/x-baileys 1.7.0
  • @fr3newera/baileys 1.0.0
  • @fr3newera/baileys 1.0.1
  • @fr3newera/baileys 1.0.4
  • @fvckerss/baileys 1.0.10
  • @fvckerss/baileys 1.0.11
  • @fvckerss/baileys 1.0.12
  • @hanssoft/baileys 2.0.4
  • @hanssoft/libsignal-node 3.0.4
  • @im-dims/baileys 5.7.3
  • @kofoffc/baileys 0.0.3
  • @kofoffc/baileys 0.0.4
  • @mikudev/ridwan-baileys-mod 1.0.2
  • @mrlegendbot/baileys 1.0.0
  • @mrlegendbot/baileys 1.1.0
  • @myisrfn/baileys-mod 1.0.1
  • @myisrfn/baileys-mod 1.0.2
  • @myisrfn/baileys-mod 1.0.6
  • @myisrfn/baileys-mod 2.0.4
  • @nazi-team/libsignal-node 2.0.1
  • @nexustechpro/baileys 2.2.0
  • @nexustechpro/baileys 2.2.2
  • @nexustechpro/baileys 2.2.3
  • @nexustechpro/baileys 2.2.5
  • @neykoor/baileys 7.0.13-rc15
  • @neykoor/baileys 7.0.14-rc15
  • @neykoor/baileys 7.0.15-rc15
  • @neykoor/baileys 7.0.16-rc15
  • @otaxayuns/baileys 7.0.4
  • @otaxayuns/baileys 7.0.5
  • @prototypevip/baileys 0.0.1
  • @prototypevip/baileys 0.0.2
  • @prototypevip/baileys 0.0.3
  • @prototypevip/baileys 0.0.4
  • @rexxhayanasi/elaina-baileys 1.3.4-rc.14
  • @rexxhayanasi/elaina-baileys 1.3.4-rc.15
  • @rexxhayanasi/elaina-baileys 1.3.4-rc.17
  • @rexxtheproject/elaina-baileys 1.0.0
  • @sairidev/baileys-new 0.3.19
  • @sankavollereii/sanka-baileyss 2.5.8
  • @sankavollereii/sanka-baileyss 2.5.9
  • @sankavollereii/sanka-baileyss 2.6.0
  • @sankavollereii/sanka-baileyss 2.6.1
  • @sankavollereii/sanka-baileyss 2.6.2
  • @sanzstore/baileys-pro 1.0.0
  • @sanzxcode/baileys 7.0.1
  • @sanzxcode/libsignal-node 2.2.5
  • @sgintokic/baileys 0.1.4
  • @shenira/baileys 4.0.1
  • @shenira/libsignal-node 2.2.4
  • @shenira/libsignal-node 2.2.5
  • @sheniraid/baileys 4.0.11
  • @shennmine/baileys 1.1.1
  • @shennmine/baileys 1.1.2
  • @shennmine/baileys 1.1.3
  • @shennmine/baileys 1.1.5
  • @shennmine/baileys 1.1.6
  • @shennmine/baileys 1.1.7
  • @shennmine/baileys 1.1.8
  • @shennmine/baileys 2.0.0
  • @shennmine/baileys 2.0.1
  • @shennmine/baileys 2.0.2
  • @shennmine/baileys 2.0.3
  • @shennmine/baileys 2.0.4
  • @shennmine/baileys 2.0.5
  • @shennmine/baileys 2.0.6
  • @shennmine/baileys 2.0.7
  • @shennmine/baileys 2.0.8
  • @shennmine/baileys 2.1.0
  • @shennmine/baileys 2.1.1
  • @shennmine/libsignal-node 2.0.1
  • @shennmine/libsignal-node 2.0.10
  • @shennmine/libsignal-node 2.0.13
  • @shennmine/libsignal-node 2.0.2
  • @shennmine/libsignal-node 2.0.22
  • @shennmine/libsignal-node 2.0.3
  • @shennmine/libsignal-node 2.0.4
  • @shennmine/libsignal-node 2.0.6
  • @shennmine/libsignal-node 2.0.7
  • @shennmine/libsignal-node 2.0.8
  • @shennmine/libsignal-node 2.1.9
  • @shennmine/libsignal-node 2.2.0
  • @shennmine/libsignal-node 2.2.1
  • @shennmine/libsignal-node 2.2.2
  • @shennmine/libsignal-node 2.2.3
  • @shennmine/libsignal-node 2.2.4
  • @shennmine/libsignal-node 2.2.5
  • @shennmine/libsignal-node 2.2.6
  • @sixcore/baileys 1.0.0
  • @sixcore/baileys 1.0.1
  • @sixcore/baileys 1.1.1
  • @skyzopedia/baileys 2.0.3
  • @skyzopedia/baileys 2.0.4
  • @skyzopedia/baileys 2.0.5
  • @skyzopedia/baileys 5.0.2
  • @skyzopedia/baileys 5.0.4
  • @skyzopedia/baileys 5.0.5
  • @skyzopedia/baileys 5.0.6
  • @skyzopedia/baileys 6.0.2
  • @skyzopedia/baileys 6.0.5
  • @skyzopedia/baileys 7.0.12
  • @skyzopedia/baileys 7.0.13
  • @skyzopedia/baileys 7.0.14
  • @skyzopedia/baileys-mod 3.0.2
  • @skyzopedia/baileys-mod 3.0.5
  • @skyzopedia/baileys-mod 3.0.9
  • @skyzopedia/baileys-mod 4.0.0
  • @skyzopedia/baileys-mod 4.0.1
  • @skyzopedia/baileys-mod 4.0.2
  • @skyzopedia/baileys-mod 4.0.5
  • @skyzopedia/baileys-mod 5.0.0
  • @skyzopedia/baileys-mod 5.0.1
  • @skyzopedia/baileys-mod 5.0.2
  • @skyzopedia/baileys-mod 5.0.3
  • @skyzopedia/baileys-mod 5.0.4
  • @skyzopedia/baileys-mod 5.0.5
  • @skyzopedia/baileys-mod 5.0.6
  • @skyzopedia/baileys-mod 5.0.7
  • @skyzopedia/baileys-mod 5.0.8
  • @skyzopedia/baileys-mod 6.0.1
  • @skyzopedia/baileys-mod 6.0.10
  • @skyzopedia/baileys-mod 6.0.11
  • @skyzopedia/baileys-mod 6.0.12
  • @skyzopedia/baileys-mod 6.0.15
  • @skyzopedia/baileys-mod 6.0.17
  • @skyzopedia/baileys-mod 6.0.19
  • @skyzopedia/baileys-mod 6.0.20
  • @skyzopedia/baileys-mod 6.0.22
  • @skyzopedia/baileys-mod 6.0.7
  • @skyzopedia/baileys-mod 6.0.8
  • @skyzopedia/baileys-mod 8.0.0
  • @skyzopedia/baileys-mod 8.0.1
  • @skyzopedia/baileys-mod 8.0.2
  • @skyzopedia/baileys-mod 8.0.7
  • @skyzopedia/baileys-mod 8.0.8
  • @skyzopedia/baileys-pro 2.0.0
  • @skyzopedia/baileys-pro 3.0.0
  • @skyzopedia/baileys-pro 3.0.1
  • @skyzopedia/baileys-pro 7.0.15
  • @skyzopedia/baileys-pro 7.0.16
  • @skyzopedia/baileys-pro 8.0.0
  • @skyzopedia/baileys-pro 8.0.1
  • @skyzopedia/baileys-pro 8.0.2
  • @skyzopedia/baileys-pro 8.0.3
  • @skyzopedia/baileys-pro 8.0.4
  • @skyzopedia/baileys-pro 8.0.5
  • @skyzopedia/baileys-pro 8.0.6
  • @skyzopedia/baileys-pro 8.0.7
  • @skyzopedia/libsignal-node 2.0.11
  • @skyzopedia/libsignal-node 2.0.5
  • @skyzopedia/libsignal-node 2.0.8
  • @sukatank01/baileys-whatsapp 5.5.5
  • @systemzero/baileys 1.0.8
  • @systemzero/baileys 1.1.1
  • @than1st/baileys 2.0.5
  • @than1st/baileys 2.0.6
  • @than-xs/libsignal-node 2.0.5
  • @vinnxcode/libsignal-node 1.0.0
  • @vinnxcode/libsignal-node 1.0.1
  • @vreden-team/baileys 7.7.8
  • @vreden-team/baileys 7.7.9
  • @vreden-team/baileys 7.8.0
  • @vreden-team/baileys 7.8.1
  • @web2apk/baileys 1.0.0
  • @web2apk/baileys 2.0.0
  • @web2apk/baileys 2.5.0
  • @web2apk/baileys 3.0.0
  • @web2apk/baileys 3.5.0
  • @web2apk/baileys 3.5.5
  • @web2apk/baileys 4.5.5
  • @web2apk/baileys 5.5.5
  • @web2apk/baileys 7.0.5
  • @xsat10/baileys-xsat 2.0.0
  • @xvortexsockets/baileys 1.0.1
  • @yaoii-bails/baileys 1.0.0
  • @yaoii-bails/baileys 2.0.0
  • @yaoii-bails/baileys 2.0.1
  • @yaoii-bails/baileys 2.0.10
  • @yaoii-bails/baileys 2.0.11
  • @yaoii-bails/baileys 2.0.13
  • @yaoii-bails/baileys 2.0.14
  • @yaoii-bails/baileys 2.0.15
  • @yaoii-bails/baileys 2.0.17
  • @yaoii-bails/baileys 2.0.18
  • @yaoii-bails/baileys 2.0.19
  • @yaoii-bails/baileys 2.0.23
  • @yaoii-bails/baileys 2.0.3
  • @yaoii-bails/baileys 2.0.34
  • @yaoii-bails/baileys 2.0.4
  • @yaoii-bails/baileys 2.0.5
  • @yaoii-bails/libsignal-node 2.0.2
  • @yaoii-bails/yaoii-baileys 2.0.1
  • @yaoii-bails/yaoii-baileys 2.0.10
  • @yaoii-bails/yaoii-baileys 2.0.5
  • @yazxzpedia/baileys 1.0.0
  • @yazxzpedia/baileys 4.0.0
  • @yazxzpedia/baileys 5.0.0
  • @yazxzpedia/baileys 6.0.0
  • @yazxzpedia/baileys 8.0.0
  • @zannstore/baileys 2.2.6
  • @zannstore/baileys 2.2.7
  • @zannstore/baileys 2.2.8
  • @zannstore/baileys 2.3.0
  • @zannstore/baileys 2.3.1
  • @zannstore/baileys 2.3.2
  • @zannstore/baileys 2.3.3
  • @zannstore/baileys 2.3.4
  • @zannstore/baileys 2.3.5
  • @zannstore/baileys 2.3.6
  • @zannstore/baileys 2.3.7
  • @zannstore/baileys 2.3.9
  • @zannstore/baileys 2.4.0
  • @zannstore/baileys 2.4.1
  • @zannstore/baileys 2.4.2
  • @zannstore/baileys 2.4.3
  • @zannstore/baileys 2.4.4
  • @zecho/baileys-mod 2.0.0
  • @zizie071/libsignal-node 3.3.6
  • @zizie071/libsignal-node 3.4.6
  • alice-baileys 2.0.8
  • alipclutch-baileys 8.6.58
  • alipclutch-baileys 8.6.59
  • alipclutch-baileys 8.6.60
  • alipclutch-baileys 8.6.61
  • alipclutch-baileys 8.6.63
  • alipclutch-baileys 8.6.64
  • alipclutch-baileys 8.6.65
  • alipclutch-baileys 8.6.66
  • alipclutch-baileys 8.6.70
  • alipclutch-baileys 8.6.71
  • alipclutch-baileys 8.6.72
  • alipclutch-baileys 8.6.74
  • alipclutch-baileys 8.6.75
  • alipclutch-baileys 8.6.77
  • amanexzyra-baileys 3.0.0
  • amanexzyra-baileys 4.0.0
  • amanexzyra-baileys 4.0.2
  • asepxyz-baileys 1.0.0
  • asepxyz-baileys 1.0.1
  • baileys-clean 7.3.2
  • baileys-cleaner 1.0.0
  • baileys-cleaner 1.0.2
  • baileys-cleaner 1.0.3
  • baileys-cleaner 1.0.4
  • baileys-cleaner 1.0.5
  • baileys-cleaner 1.0.6
  • baileys-cleaner 1.0.7
  • baileys-cleaner 1.0.8
  • baileys-cleaner 1.0.9
  • baileys-cleaner 1.1.0
  • baileys-cleaner 1.2.0
  • baileys-cleaner 1.3.0
  • baileys-cleaner 1.4.0
  • baileys-cleaner 1.5.0
  • baileys-cleaner 1.7.0
  • baileys-cleaner 1.8.0
  • baileys-cleaner 1.9.0
  • baileys-cleaner 1.9.1
  • baileys-cleaner 1.9.2
  • baileys-cleaner 1.9.3
  • baileys-cleaner 1.9.4
  • baileys-cleaner 1.9.5
  • baileys-cleaner 1.9.7
  • baileys-dgxeon 1.0.0
  • baileys-dtz 2.0.0
  • baileys-dtz 5.0.0
  • baileys-dtz 5.0.2
  • baileys-dtz 5.0.4
  • baileys-dtz 7.0.0
  • baileys-ud 1.0.0
  • diezyclutch-baileys 8.6.78
  • diezyyasha-baileys 8.6.57
  • diezyyasha-baileys 8.6.58
  • diezyyasha-baileys 8.6.59
  • diezyyasha-baileys 8.6.60
  • diezyyasha-baileys 8.6.61
  • diezyyasha-baileys 8.6.62
  • diezyyasha-baileys 9.0.0
  • diezyyasha-baileys 9.1.0
  • diezyyasha-baileys 9.1.1
  • diezyyasha-baileys 9.1.2
  • diezyyasha-baileys 9.1.3
  • diezyyasha-baileys 9.1.5
  • diezyyasha-baileys 9.2.0
  • freedom-baileys 2.0.0
  • libsignal-node-travatiger 1.0.0
  • libsignal-node-travatiger 1.0.1
  • sanka-baileyss 2.6.2
  • sanka-baileyss 2.6.3
  • santana-baileys 2.0.0
  • santana-baileys 2.0.1
  • santana-baileys 2.0.2
  • santana-baileys 2.0.3
  • santana-baileys 2.0.4
  • sauruslord-baileys 3.0.0
  • sauruslord-baileys 3.0.1
  • sauruslord-baileys 3.0.2
  • supun-baileys 2.0.0
  • torbaileys 8.0.0
  • torbaileys 8.0.1
  • um4r719-baileys 0.1.11
  • um4r719-baileys 0.1.15
  • ynastore-baileys 1.0.20
  • ynastore-baileys 1.0.21
  • yuji-baileys 4.0.2
  • yuji-baileys 4.0.4

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