Несколько популярных npm-пакетов, используемых во множестве веб-проектов были скомпрометированы и троянизированы неизвестными злоумышленниками. Атакующие, при помощи фишинговой атаки на мейнтейнеров, смогли получить доступ как минимум к одному репозиторию и снабдить пакеты вредоносным кодом, служащим для охоты за криптоактивами. Все веб-приложения, собранные с применением троянизированных пакетов, превращаются в криптодрейнер. А таковых может быть достаточно много, поскольку у скомпрометированных пакетов было более двух миллиардов загрузок в день (по данным Aikido security).
Чем опасны троянизированные пакеты, использованные в этой атаке?
Во все пакеты был добавлен обфусцированный Javascript. Если скомпрометированный пакет используется в веб-приложении, то вредоносный код активизируется на устройствах пользователей, обращающихся к этому приложению. Действуя на уровне браузера, он перехватывает сетевой трафик и API-запросы и изменяет данные, связанные с криптокошельками Ethereum, Bitcoin, Solana, Litecoin, Bitcoin Cash и Tron. Зловред подменяет их адреса и перенаправляет транзакции в кошельки злоумышленников.
Примерно через три часа после начала атаки администрация npm начала удалять обнаруженные заражённые пакеты, но сколько точно раз их успели скачать за это время – точно неизвестно.
Как злоумышленникам удалось получить доступ к репозиториям
Атакующие воспользовались достаточно банальным приемом — они создали фишинговое письмо, в котором мейнтейнеров настоятельно просили при первом же удобном случае обновить учетные данные двухфакторной аутентификации. В противном случае им угрожали блокировкой учетной записи начиная с 10 сентября 2025 года. Письма были разосланы с почтового ящика на домене npmjs[.]help, похожего на легитимный npmjs.com. На том же домене располагался и фишинговый сайт, имитирующий официальную страницу реестра npm. Введенные на этом сайте учетные данные незамедлительно попадали в руки злоумышленников.
Атака прошла успешно как минимум против одного мейнтейнера, в результате чего злоумышленникам удалось скомпрометировать npm-пакеты color, debug, ansi-regex, chalk, и ряд других. Однако, по всей видимости, фишинговая атака была более обширна, потому что аналогичное письмо приходило и другим мейнтейнерам и разработчикам, так что полный список троянизированных пакетов может быть длиннее.
Комментарий от Леонида Безвершенко, старшего исследователя угроз информационной безопасности, Global Research & Analysis Team (GReAT):
Атака на пакеты npm с миллиардами скачиваний в неделю наглядно демонстрирует уязвимость цепочек поставок в экосистеме open-source. Несмотря на то, что в данном случае вредоносная нагрузка оказалась ограниченной — мошенникам удалось украсть всего десятки долларов, — ситуация могла развиться гораздо серьезнее.
Зараженные пакеты могли использоваться для компрометации корпоративных серверов, внедрения бэкдоров в системы управления бизнес-процессами или кражи конфиденциальных данных клиентов и партнеров. В таком сценарии мы бы получили масштабную компрометацию, аналогичную атаке XZ: компании, интегрировавшие вредоносные библиотеки во внутренние сервисы или SaaS-продукты могли передать заражение сотням или тысячам корпоративных клиентов.
Как и в случае с XZ, ключевым фактором стала не техническая уязвимость, а человеческий фактор — разработчик популярных npm-пакетов стал жертвой фишингового письма. Опыт показывает: мейнтейнеры широко используемого open-source неизменно остаются привлекательной целью для атакующих, ведь компрометация одного проекта может поставить под угрозу тысячи других систем.
Такой «эффект домино» может превратить единичную ошибку или неосторожность в проблему целой отрасли.
Какие именно пакеты были скомпрометированы
На момент написания этого поста известно что зловред был добавлен в следующие пакеты:
- ansi-regex
- ansi-styles
- backslash
- chalk
- chalk-template
- color-convert
- color-name
- color-string
- debug
- error-ex
- has-ansi
- is-arrayish
- simple-swizzle
- slice-ansi
- strip-ansi
- supports-color
- supports-hyperlinks
- wrap-ansi
Однако, как мы уже писали выше, список может пополняться. За его пополнением можно следить на GitHub.
Как оставаться в безопасности
Продукты «Лаборатории Касперского», включая Kaspersky Endpoint Security и Kaspersky Symphony, детектируют данную угрозу с вердиктами Trojan-Banker.Script.Osthereum с различными префиксами (HEUR, UDS, VHO) и модификациями, например HEUR:Trojan-Banker.Script.Osthereum.gen, а также Trojan.JS.Agent.exf с различными префиксами.
Для поиска можно использовать маски:
- Trojan-Banker.Script.Osthereum
- *Trojan.JS.Agent.exf
Фишинговый домен npmjs[.]help, с помощью которого взломали аккаунты меинтейнеров, также детектируется нашими продуктами. В частности, обращения к этому домену детектируют наши решения для сетевой безопасности, такие как KATA, NTA и .
Информация о вредоносных пакетах также была добавлена (и продолжает добавляться по мере обнаружения новых данных) в фид Open Source Software Threats Data Feed. Кроме того, наши аналитики сообщают о фактах обнаружения зараженных пакетов клиентам сервиса Kaspersky Managed Detection and Response.
Разработчикам рекомендуется провести аудит зависимостей в своих проектах и если там используются один из скомпрометированных пакетов, закрепить (pin) безопасную версию с помощью фичи overrides в package.json. Тут можно найти более подробную инструкцию.
Мейнтейнерам и разработчикам, имеющим доступ к репозиториям ПО с открытым исходным кодом, мы рекомендуем быть вдвойне осторожными при получении писем, убеждающих их войти в свои учетные записи. А еще лучше — также использовать защитные решения с антифишинговым движком.