Несколько популярных 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, и ряд других. Однако, по всей видимости, фишинговая атака была более обширна, потому что аналогичное письмо приходило и другим мейнтейнерам и разработчикам, так что полный список троянизированных пакетов может быть длиннее.
Какие именно пакеты были скомпрометированы
На момент написания этого поста известно что зловред был добавлен в следующие пакеты:
- 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.
Как оставаться в безопасности
Продукты «Лаборатории Касперского» как для домашних, так и для корпоративных пользователей успешно выявляют и останавливают использованное в этой атаке вредоносное ПО.
Разработчикам рекомендуется провести аудит зависимостей в своих проектах и если там используются один из скомпрометированных пакетов, закрепить (pin) безопасную версию с помощью фичи overrides в package.json. Тут можно найти более подробную инструкцию.
Мейнтейнерам и разработчикам, имеющим доступ к репозиториям ПО с открытым исходным кодом, мы рекомендуем быть вдвойне осторожными при получении писем, убеждающих их войти в свои учетные записи. А еще лучше — также использовать защитные решения с антифишинговым движком.
Бизнес — Блог Касперского