Вредоносный js-код добавлен в 18+ npm-зависимостей для frontend-приложений. Суммарно эти зависимости имеют более 2 миллиардов загрузок в неделю.
backslash (0.26m downloads per week)
chalk-template (3.9m downloads per week)
supports-hyperlinks (19.2m downloads per week)
has-ansi (12.1m downloads per week)
simple-swizzle (26.26m downloads per week)
color-string (27.48m downloads per week)
error-ex (47.17m downloads per week)
color-name (191.71m downloads per week)
is-arrayish (73.8m downloads per week)
slice-ansi (59.8m downloads per week)
color-convert (193.5m downloads per week)
wrap-ansi (197.99m downloads per week)
ansi-regex (243.64m downloads per week)
supports-color (287.1m downloads per week)
strip-ansi (261.17m downloads per week)
chalk (299.99m downloads per week)
debug (357.6m downloads per week)
ansi-styles (371.41m downloads per week)
Атака типичная: фишинговое письмо 🤒 разработчику "от имени npm", кража токена, публикация вредоносной версии библиотеки от имени разработчика (также как в инцидентах solana/web3.js , lottie-player).
Код злоумышленников переопределял функции для отправки сетевых запросов fetch, XMLHttpRequest, и API кошельков (window.ethereum, Solana и др.), анализировал запросы/ответы и на лету подменял получателя в криптовалютных транзакциях.
Цель злоумышленников - frontend-приложения с функциями перевода криптовалюты 💸. В других приложениях непосредственно деструктивные действия не выполняются (хотя иногда злоумышленники кроме целевых, добавляют всенаправленные вредоносные нагрузки, например js-сниффер отправленных форм в инциденте Flibusta).
⚠️ Не всегда подобные инциденты освещаются во всех новостях как в этот раз. И в фидах SCA-вендоров тоже может не быть такой информации в следующих случаях.
1️⃣ Непопулярные библиотеки и форки
2️⃣ Разработчик сам добавляет вредоносный код в библиотеку (polyfill.js, colors и faker)
3️⃣ Мейнтейнеры не заметили, что вредоносный код был добавлен одним из них
4️⃣ Вредоносную библиотеку использует внешний js-сервис, который используется в нашем приложении
5️⃣ Ситуация может осложняться запуском вредоносного кода по условию, например по дате, допустим через 6 месяцев ⏰, чтобы скомпрометированная версия распространилась по большинству "живых" frontend-приложений по всему миру 🌍
В этих случаях вредоносный js-код может месяцами 📆 присутствовать в наших frontend-приложениях, если мы не анализируем поведение приложения до релиза и регулярно после релиза в продуктиве.
@FrontSecOps

