В экосистеме JavaScript произошёл серьёзный инцидент, который хорошо показывает, насколько опасными стали атаки на open source и цепочки поставок. Исследователи StepSecurity сообщили о компрометации axios — одной из самых популярных HTTP-библиотек в npm (~83 миллионов загрузок в неделю). Злоумышленник получил доступ к аккаунту одного из ведущих мейнтейнеров проекта и опубликовал две вредоносные версии пакета: axios@1.14.1 и axios@0.30.4.

На первый взгляд это выглядит как обычное обновление зависимости. Но на деле установка этих версий могла привести к заражению системы трояном удалённого доступа.

Что произошло

По данным исследователей, атака не была связана со взломом самого GitHub-репозитория или обходом стандартного CI/CD через GitHub Actions. Сценарий оказался проще и опаснее: атакующий скомпрометировал учётную запись сопровождающего, сменил привязанный email на ProtonMail и вручную опубликовал заражённые сборки через npm CLI.

Именно поэтому привычные защитные механизмы публикации фактически не сработали. Если у злоумышленника есть права мейнтейнера, он может доставить вредоносный код так, будто это обычный релиз от доверенного участника проекта.

Почему это опасно

Главная проблема в том, что axios — это массовая зависимость. Её используют не только в пользовательских проектах, но и во внутренних сервисах, backend-приложениях, скриптах автоматизации и CI/CD-конвейерах.

Это значит, что вредоносная версия могла попасть:

  • на рабочие станции разработчиков;

  • на серверы сборки;

  • в тестовые и production-пайплайны;

  • в инфраструктуру, где хранятся токены, ключи и другие секреты.

Если заражённый пакет устанавливался в CI, последствия могут быть особенно тяжёлыми: утечка переменных окружения, токенов доступа к GitHub, npm, облакам, Docker Registry и другим внутренним системам.

Как был встроен вредонос

В заражённые версии axios добавили зависимость plain-crypto-js@4.2.1. Примечательно, что самой библиотеке axios она фактически не нужна и по прямому назначению не используется. Её задача была другой — запустить postinstall-скрипт после установки пакета.

Именно этот скрипт и выступает как дроппер вредоносной нагрузки. После установки он связывается с управляющим сервером sfrclak.com (142.11.206.73) и начинает загрузку второй стадию скрипта в зависимости от операционной системы.

Под удар попали сразу три платформы:

  • macOS

  • Windows

  • Linux

Что делает троян

После запуска вредоносный код не просто подгружает полезную нагрузку, но и пытается скрыть факт своего присутствия. По данным исследователей, он удаляет следы своей активности и подменяет package.json на чистую версию, чтобы усложнить анализ и поиск источника утечки.

Позже Socket AI подтвердил, что plain-crypto-js — это обфусцированный дроппер и лоадер, использующий вполне зрелые техники маскировки:

  • деобфускацию кода только во время выполнения;

  • динамическую загрузку модулей вроде fs, os и execSync;

  • выполнение shell-команд на хосте;

  • размещение файлов во временных каталогах и в ProgramData на Windows;

  • удаление или переименование собственных артефактов после запуска.

Иными словами, это был не «сломанный пакет», а полноценный вредоносный механизм доставки.

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

Исследователи рекомендуют обращать внимание на следующие признаки:

Пакеты:

  • axios@1.14.1

  • axios@0.30.4

  • plain-crypto-js@4.2.1

Сетевая активность:

  • sfrclak.com

  • 142.11.206.73

Файлы на хостах:

  • macOS: /Library/Caches/com.apple.act.mond

  • Windows: %PROGRAMDATA%\wt.exe

  • Linux: /tmp/ld.py

Если одна из этих версий axios была установлена, систему рекомендуется считать потенциально скомпрометированной.

Что делать прямо сейчас

Минимальный набор действий выглядит так:

  • проверить, использовались ли axios@1.14.1 или axios@0.30.4;

  • откатиться на безопасные версии: axios@1.14.0 или axios@0.30.3;

  • проверить lock-файлы, историю сборок и логи установок;

  • искать исходящие подключения к sfrclak.com и 142.11.206.73;

  • просканировать машины на наличие известных файлов-индикаторов;

  • провести ротацию токенов, API-ключей, паролей и других секретов, если заражённая версия хотя бы раз устанавливалась.

Для CI/CD также советуют использовать флаг при установке:

npm install --ignore-scripts

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

Вывод

История с axios важна не только потому, что была скомпрометирована одна из самых популярных библиотек JavaScript. Этот инцидент показывает более широкую проблему: даже если у open source-проекта есть нормальные пайплайны и базовые меры защиты, компрометация аккаунта мейнтейнера может обойти эти механизмы и превратить обычное обновление зависимости в канал доставки вредоносного кода.

Опасность здесь не ограничивается только пользователями самой библиотеки. Поскольку axios используется в огромном числе приложений, внутренних сервисов, инструментов автоматизации и CI/CD-сред, одна такая публикация потенциально затрагивает тысячи проектов и компаний. По сути, это атака не только на конкретный пакет, а на всю модель доверия внутри npm-экосистемы.

Именно поэтому, если в вашей инфраструктуре хотя бы теоретически могли появиться axios@1.14.1 или axios@0.30.4, относиться к ситуации нужно как к полноценному инциденту ИБ. Простого отката версии недостаточно: необходимо проверять системы, сетевую активность, артефакты заражения и все секреты, к которым могли иметь доступ потенциально скомпрометированные машины. В случае supply chain-атак главный риск — не только сам вредоносный пакет, а то, насколько глубоко он успевает зайти в доверенную среду разработки.


НЛО прилетело и оставило здесь промокод для читателей нашего блога:

-15% на заказ любого VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.