Компрометация npm-пакета Axios: как вредоносная зависимость превратила обновление в атаку

CyberSecureFox

Один из самых популярных HTTP-клиентов в экосистеме JavaScriptAxios — стал жертвой атаки на цепочку поставок npm. В реестр были опубликованы две вредоносные версии пакета, которые незаметно добавляли поддельную зависимость и устанавливали кроссплатформенный вредоносный модуль удалённого доступа (RAT).

Какие версии Axios оказались вредоносными и что в них изменили

Исследователи StepSecurity установили, что версии Axios 1.14.1 и Axios 0.30.4 содержали подложную зависимость [email protected]. При этом исходный код Axios не был модифицирован — опасность скрывалась именно во внешнем пакете.

Эта зависимость никогда не использовалась в коде Axios и не импортировалась разработчиками. Её единственная задача — выполнить скрипт postinstall, который выступает в роли dropper’а RAT, загружая и развёртывая уже готовую вредоносную нагрузку под macOS, Windows и Linux.

После выявления инцидента вредоносные версии Axios и пакет plain-crypto-js были удалены из npm. Пользователям настоятельно рекомендуется немедленно откатиться на безопасные версии Axios 1.14.0 или Axios 0.30.3 и провести ротацию всех секретов и учётных данных (токены, ключи, пароли), которые могли быть задействованы системами, где стояли скомпрометированные сборки.

Компрометация npm-аккаунта и обход CI/CD

По данным StepSecurity, злоумышленники получили доступ к учётной записи основного мейнтейнера Axios в npm («jasonsaayman») и сменили его зарегистрированный email на Proton Mail-адрес под своим контролем («[email protected]»). Вредоносный пакет plain-crypto-js был опубликован пользователем npm с ником «nrwise» и email «[email protected]».

Эксперты предполагают, что атакующий завладел долгоживущим classic access token npm, что позволило обойти GitHub Actions CI/CD-пайплайн проекта и напрямую публиковать модифицированные версии Axios в реестр без стандартных проверок и автоматических сборок.

Исследователь Ашиш Курми отмечает, что атака была заранее спланирована: вредоносная зависимость была подготовлена примерно за 18 часов до публикации, заранее собраны три отдельных полезных нагрузки под разные ОС, а обе ветки релизов Axios были модифицированы менее чем за 40 минут. «Каждый след был спроектирован так, чтобы самоуничтожаться», — подчёркивают эксперты.

Как работает вредоносный postinstall-скрипт и цепочка атаки

Внутри plain-crypto-js ключевую роль играет обфусцированный Node.js dropper «setup.js». После установки зависимости он автоматически запускается через postinstall и выполняет детектирование операционной системы, выбирая один из трёх сценариев атаки.

Каждая платформа отправляет уникальный HTTP-запрос (POST) на единый адрес C2-сервераpackages.npm.org — но с разными путями: /product0 для macOS, /product1 для Windows и /product2 для Linux. Это позволяет управляющему серверу выдавать корректный бинарный файл под конкретную ОС при обращении к одному эндпоинту.

Для macOS загружается C++ RAT, который проводит «отпечаток» системы (fingerprinting), а затем каждые 60 секунд связывается с удалённым сервером за командами. Он умеет запускать дополнительные полезные нагрузки, выполнять произвольные shell-команды, перечислять файловую систему и по команде завершать свою работу.

Маскировка и зачистка следов в npm-пакете

После запуска основного вредоносного модуля Node.js-скрипт выполняет несколько шагов по скрытию признаков атаки в файловой структуре проекта:

— удаляет postinstall-скрипт из установленного пакета;
— удаляет package.json, в котором был прописан postinstall-хук;
— переименовывает файл package.md в package.json.

Файл package.md в составе plain-crypto-js является «чистым» манифестом без каких-либо хуков. Переключая манифесты местами, злоумышленники рассчитывали, что даже при последующем анализе установленного пакета не будет видно ни postinstall-скрипта, ни явных признаков компрометации.

Дополнительные затронутые пакеты и признаки компрометации

Компания Socket, специализирующаяся на безопасности цепочки поставок, сообщила о ещё двух пакетах, через которые распространялась та же вредоносная нагрузка:

@shadanai/openclaw — внутри него plain-crypto-js внедрён глубоко по вложенному пути в виде vendored-зависимости;
@qqbrowser/[email protected] — поставляет подменённый [email protected] в каталоге node_modules.

Указано, что «чистый» Axios имеет всего три зависимости: follow-redirects, form-data и proxy-from-env. Появление plain-crypto-js в списке зависимостей — однозначный признак подмены и вмешательства в цепочку поставок.

Разработчикам и компаниям рекомендуется:

— проверить, не использовались ли версии Axios 1.14.1 или 0.30.4, а также указанные связанные пакеты;
— провести аудит зависимостей и lock-файлов (package-lock.json, yarn.lock);
— при обнаружении следов установки вредоносных версий считать систему скомпрометированной, выполнить полное сканирование, ротацию секретов и переустановку зависимостей из доверенного состояния.

Инцидент с Axios наглядно показывает, насколько опасны атаки на цепочку поставок npm и другие экосистемы open source. Учитывая, что Axios загружается более чем 83 миллиона раз в неделю, даже кратковременная компрометация такого пакета создаёт значительный риск для разработчиков, инфраструктуры компаний и конечных пользователей. Повышенное внимание к безопасности учётных записей мейнтейнеров, ограничение и ротация токенов доступа, а также автоматический анализ зависимостей на наличие подозрительных скриптов и неожиданных зависимостей становятся критически важными элементами современной практики кибербезопасности.

Оставьте комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.