Джейсон Сааман, мейнтейнер npm-пакета Axios, который скачивают почти 100 миллионов раз в неделю, стал жертвой тщательно спланированной атаки. За ней стоит северокорейская группировка UNC1069, чьи методы пересекаются с известной хакерской группой BlueNoroff. Результатом стала компрометация цепочки поставок: в реестр npm попали троянизированные версии Axios — 1.14.1 и 0.30.4 — с встроенным трояном удалённого доступа (RAT), который устанавливал на машины жертв имплант под названием WAVESHAPER.V2.

Сааман сам рассказал, как разворачивалась атака. Всё началось с того, что злоумышленники вышли на него, представившись основателем реальной и достаточно известной компании. Они клонировали и внешность основателя, и айдентику компании. Это не был топорный фишинг — это была ювелирная операция, рассчитанная конкретно на него.
Следующим шагом стало приглашение в поддельное рабочее пространство Slack. Там было всё как полагается: фирменный стиль компании, правдоподобные названия каналов, активные обсуждения, даже репосты публикаций из LinkedIn. Создавалось полное ощущение, что ты попал в живое корпоративное пространство реальной организации. На этом фоне договорённость о видеозвонке в Microsoft Teams выглядела совершенно естественно.
При подключении к звонку Сааман увидел сообщение об ошибке — якобы его система устарела и требует обновления. Нажатие на кнопку «обновления» запустило установку RAT. Через троян злоумышленники получили доступ к учётным данным npm-аккаунта Саамана и опубликовали от его имени заражённые версии библиотеки.
Масштаб потенциального ущерба трудно переоценить. Axios — один из самых распространённых JavaScript-пакетов. Он используется напрямую и как транзитивная зависимость в огромном количестве проектов. Ахмад Нассри из компании Socket обратил внимание на то, что компрометация настолько вездесущего пакета наглядно показывает, насколько сложно контролировать экспозицию и разрешение зависимостей в современных JavaScript-проектах. Достаточно скомпрометировать одного мейнтейнера, чтобы накрыть волной вредоносного кода огромное число конечных пользователей.
Группировка UNC1069, по данным исследователя безопасности Тейлор Монахан, исторически охотилась за криптовалютными основателями, венчурными инвесторами и публичными фигурами. Цель была в краже аккаунтов и последующем использовании скомпрометированных контактов для выхода на новые цели. Но теперь тактика сместилась: хакеры целенаправленно атакуют мейнтейнеров открытого исходного кода. Монахан назвала эту эволюцию «тревожной». Раньше эту же кампанию описывали Huntress и Kaspersky (последние отслеживают её под именем GhostCall).
После инцидента Сааман провёл полный сброс всех персональных устройств и учётных данных. Он настроил неизменяемые релизы, перешёл на публикацию пакетов через OIDC-поток (OpenID Connect) и обновил GitHub Actions в соответствии с актуальными рекомендациями по безопасности.
Вся эта история — неприятное напоминание о хрупкости экосистемы npm. Один человек, одна ошибка в распознавании социальной инженерии, и вредоносный код расползается по миллионам проектов. Причём атакующие не использовали никаких нулевых дней или сложных эксплойтов. Хватило убедительной подделки корпоративного Slack, поддельного звонка в Teams и фейкового сообщения об обновлении. Технически — почти примитивно. Социально — безупречно.

Изображение носит иллюстративный характер
Сааман сам рассказал, как разворачивалась атака. Всё началось с того, что злоумышленники вышли на него, представившись основателем реальной и достаточно известной компании. Они клонировали и внешность основателя, и айдентику компании. Это не был топорный фишинг — это была ювелирная операция, рассчитанная конкретно на него.
Следующим шагом стало приглашение в поддельное рабочее пространство Slack. Там было всё как полагается: фирменный стиль компании, правдоподобные названия каналов, активные обсуждения, даже репосты публикаций из LinkedIn. Создавалось полное ощущение, что ты попал в живое корпоративное пространство реальной организации. На этом фоне договорённость о видеозвонке в Microsoft Teams выглядела совершенно естественно.
При подключении к звонку Сааман увидел сообщение об ошибке — якобы его система устарела и требует обновления. Нажатие на кнопку «обновления» запустило установку RAT. Через троян злоумышленники получили доступ к учётным данным npm-аккаунта Саамана и опубликовали от его имени заражённые версии библиотеки.
Масштаб потенциального ущерба трудно переоценить. Axios — один из самых распространённых JavaScript-пакетов. Он используется напрямую и как транзитивная зависимость в огромном количестве проектов. Ахмад Нассри из компании Socket обратил внимание на то, что компрометация настолько вездесущего пакета наглядно показывает, насколько сложно контролировать экспозицию и разрешение зависимостей в современных JavaScript-проектах. Достаточно скомпрометировать одного мейнтейнера, чтобы накрыть волной вредоносного кода огромное число конечных пользователей.
Группировка UNC1069, по данным исследователя безопасности Тейлор Монахан, исторически охотилась за криптовалютными основателями, венчурными инвесторами и публичными фигурами. Цель была в краже аккаунтов и последующем использовании скомпрометированных контактов для выхода на новые цели. Но теперь тактика сместилась: хакеры целенаправленно атакуют мейнтейнеров открытого исходного кода. Монахан назвала эту эволюцию «тревожной». Раньше эту же кампанию описывали Huntress и Kaspersky (последние отслеживают её под именем GhostCall).
После инцидента Сааман провёл полный сброс всех персональных устройств и учётных данных. Он настроил неизменяемые релизы, перешёл на публикацию пакетов через OIDC-поток (OpenID Connect) и обновил GitHub Actions в соответствии с актуальными рекомендациями по безопасности.
Вся эта история — неприятное напоминание о хрупкости экосистемы npm. Один человек, одна ошибка в распознавании социальной инженерии, и вредоносный код расползается по миллионам проектов. Причём атакующие не использовали никаких нулевых дней или сложных эксплойтов. Хватило убедительной подделки корпоративного Slack, поддельного звонка в Teams и фейкового сообщения об обновлении. Технически — почти примитивно. Социально — безупречно.