Инциденты

Axios подменили через npm: злоумышленники выпустили вредоносные версии популярнейшей JS-библиотеки

Маша Даровская
By Маша Даровская , IT-редактор и автор
Axios подменили через npm: злоумышленники выпустили вредоносные версии популярнейшей JS-библиотеки
Обложка © Anonhaven

Популярная JavaScript-библиотека оказалась в центре серьезного инцидента с цепочкой поставок ПО (supply chain attack). Исследователи StepSecurity сообщили, что в npm были опубликованы две вредоносные версии пакета — axios@1.14.1 и axios@0.30.4. Эти релизы не содержали вредоносного кода в самих исходниках axios, но тянули дополнительную зависимость, которая запускала вредоносную нагрузку при установке. GitHub issue в репозитории axios с тем же предупреждением открыли сегодня, 31 марта 2026 года.

 

По данным StepSecurity, вредоносные версии опубликовали 30–31 марта 2026 года с использованием скомпрометированных npm-учетных данных одного из ведущих мейнтейнеров проекта. Исследователи отдельно отмечают, что публикация шла в обход обычного GitHub Actions CI/CD-процесса проекта: вредоносные пакеты были выпущены вручную через npm CLI. В анализе StepSecurity также говорится, что у учетной записи издателя изменили email на ProtonMail-адрес, не связанный с обычным процессом релизов. GitHub issue в репозитории axios подтверждает: версии 1.14.1 и 0.30.4 помечены как скомпрометированные. 

Злоумышленник не менял код axios напрямую. Вместо этого в package.json обоих релизов была добавлена новая зависимость — plain-crypto-js@4.2.1. Эта зависимость вообще не импортируется в исходниках axios и была нужна только ради одного: выполнить postinstall-скрипт при установке пакета. То есть вредоносный эффект срабатывал не в момент вызова axios в приложении, а уже на этапе npm install. Зависимость plain-crypto-js@4.2.1 маскировала под легитимный пакет и использовала имя, похожее на известную криптографическую библиотеку.

Схема состояла из нескольких этапов. Сначала опубликовали пакет plain-crypto-js@4.2.0 в качестве декорации, чтобы у нового пакета появилась история публикаций и он не выглядел совсем пустым. Затем появился plain-crypto-js@4.2.1, который содержал вредоносный postinstall: "node setup.js". После этого опубликовали axios@1.14.1 и axios@0.30.4, куда эту зависимость добавили как часть дерева зависимостей.

После установки вредоносный скрипт разворачивал загрузчик (dropper), задача которого скачать или запустить следующий этап атаки. В данном случае речь шла о RAT — Remote Access Trojan или троян удаленного доступа. Цепочка была рассчитана на macOS, Windows и Linux, а сам вредоносный компонент связывался с сервером управления (command-and-control, C2) для получения дальнейшей нагрузки.

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

axios — популярная библиотека, один из самых массово используемых HTTP-клиентов в JavaScript-экосистеме, с более чем 100 млн загрузок в неделю. Даже если вредоносные версии прожили сравнительно недолго, само окно публикации было достаточно опасным для CI-систем, сборочных пайплайнов, временных окружений и машин разработчиков, где зависимости подтягиваются автоматически.

Вредоносную зависимость подготовили заранее, а сами отравленные версии axios появились в npm ночью по UTC:
axios@1.14.1 — в 00:21 UTC 31 марта 2026 года;
axios@0.30.4 — в 01:00 UTC 31 марта 2026 года.

Позже обе версии удалили из реестра, а тег latest вернулся к 1.14.0. В сторонних сервисах отслеживания релизов axios сейчас также отображается именно 1.14.0 как последняя нормальная версия, опубликованная 27 марта 2026 года.

StepSecurity рекомендует разработчикам, безопасникам и DevOps-инженерам:

  1. Проверить, не устанавливались ли axios@1.14.1 или axios@0.30.4 в локальных окружениях, CI, контейнерных сборках и временных runner’ах.

  2. Проверить lock-файлы, кэш npm, артефакты сборки и dependency snapshots.

  3. Искать следы установки plain-crypto-js@4.2.1 и выполнения postinstall-скриптов.

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

  5. Пересобрать окружение из проверенных зависимостей и обновить секреты.

Есть новость? Станьте автором.

Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.

Вопросы по теме

Что произошло с axios?
В npm опубликовали две вредоносные версии — axios@1.14.1 и axios@0.30.4. Это подтверждено анализом StepSecurity и GitHub issue в репозитории axios.
Вредоносный код был встроен прямо в axios?
Нет. StepSecurity пишет, что в самих исходниках axios вредоносного кода не было. Опасность шла через добавленную зависимость plain-crypto-js@4.2.1.
Что такое postinstall-скрипт простыми словами?
Это команда, которая автоматически запускается после установки пакета. В этом случае она использовалась для запуска загрузчика вредоносного ПО.
Что такое RAT?
RAT (Remote Access Trojan) — троян удаленного доступа. Это вредоносная программа, которая дает атакующему удаленный контроль над системой или помогает его получить. В публикации StepSecurity речь идет о кроссплатформенном дроппере для macOS, Windows и Linux.
Какие версии считаются опасными?
Подтверждено две версии: 1.14.1 и 0.30.4. Они названы скомпрометированными в issue репозитория axios.
Какая версия сейчас считается нормальной?
По сторонним трекерам релизов и по данным, приведенным StepSecurity, актуальной чистой версией снова считается 1.14.0.
Что проверять в первую очередь?
Наличие axios@1.14.1, axios@0.30.4, следов plain-crypto-js@4.2.1, выполнения postinstall, а также доступных во время сборки секретов и токенов. Это следует из описанного механизма атаки.