Axios взломан на npm — вредоносные версии устанавливают RAT-троянец на все ОС
Вредоносные версии axios 2.x на npm устанавливают RAT-троянец на Windows, Linux и macOS. Атака использует postinstall-скрипт и C2-сервер для удалённого управления.
Новости TprogerЕсли ваш проект использует axios — проверьте package-lock.json прямо сейчас. 31 марта 2026 года злоумышленники взломали npm-аккаунт основного мейнтейнера библиотеки и опубликовали версии с троянцем удалённого доступа (RAT).
Скомпрометированы версии axios@1.14.1 и axios@0.30.4 — обе ветки, актуальная и легаси. Вредоносный код устанавливает кроссплатформенный RAT, который работает на macOS, Windows и Linux. Пакеты были доступны в npm-реестре около 3 часов, прежде чем npm их удалил.
Ключевые выводы
— Скомпрометированы axios@1.14.1 и axios@0.30.4 через взлом npm-аккаунта мейнтейнера
— Вредоносная зависимость plain-crypto-js устанавливает RAT-троянец на все ОС
— axios — самый популярный HTTP-клиент в JS-экосистеме: более 100 млн загрузок в неделю
— Безопасные версии: 1.14.0 (для 1.x) и 0.30.3 (для 0.x)
— Все секреты на затронутых системах нужно ротировать немедленно
Axios — HTTP-клиент для Node.js и браузеров с более чем 100 миллионами загрузок в неделю. Атаки на цепочки поставок (supply chain attacks) — это компрометация инфраструктуры распространения ПО: вместо атаки на конечную цель злоумышленник внедряет вредоносный код в доверенный пакет, который жертва сама устанавливает.
Как произошла атака
Злоумышленники получили доступ к npm-аккаунту jasonsaayman — основного мейнтейнера axios. Email аккаунта был изменён с легитимного адреса на ifstap@proton.me. Предположительно, был украден долгоживущий классический npm access token.
Легитимные релизы axios публикуются через GitHub Actions с криптографической привязкой npm OIDC Trusted Publisher и содержат SLSA-провенанс (Supply chain Levels for Software Artifacts — стандарт подтверждения целостности сборки). Вредоносные версии были опубликованы вручную через npm CLI — без привязки к GitHub, без SLSA-провенанса, без соответствующего тега в репозитории.
Атака была подготовлена заранее: за 18 часов до компрометации axios в npm был опубликован пакет-приманка plain-crypto-js — клон легитимного crypto-js с тем же описанием и именем автора. Сначала чистая версия 4.2.0, затем вредоносная 4.2.1 с постустановочным скриптом.
Хронология атаки
Все события — по UTC, 30–31 марта 2026 года:
- 30 марта, 05:57 — атакующий публикует чистый
plain-crypto-js@4.2.0для формирования истории публикаций - 30 марта, 23:59 — выходит вредоносный
plain-crypto-js@4.2.1с постустановочным скриптом - 31 марта, 00:05 — Socket детектирует вредоносный пакет — через 6 минут после публикации
- 31 марта, 00:21 — публикуется
axios@1.14.1со скомпрометированного аккаунта - 31 марта, 01:00 — публикуется
axios@0.30.4— обе ветки поражены за 39 минут - 31 марта, ~03:15 — npm удаляет обе вредоносные версии, dist-tag latest откатывается к 1.14.0
- 31 марта, 04:26 — npm публикует заглушку безопасности для plain-crypto-js — пакет заблокирован
Итого: axios@1.14.1 был доступен около 2 часов 53 минут, axios@0.30.4 — около 2 часов 15 минут.
Что делает вредоносный код
В исходном коде axios изменений нет — добавлена только зависимость plain-crypto-js@^4.2.1. Сам пакет никогда не импортируется в коде; он существует исключительно для запуска postinstall-хука при npm install.
Дроппер setup.js
Файл setup.js весит 4209 байт и использует двухслойную обфускацию: сначала reversed Base64-декодирование (с подстановкой символов), затем XOR-шифр с ключом OrDeR_7077. Дроппер определяет ОС и загружает платформенный payload с C2-сервера.
Payload по платформам
macOS: AppleScript-дроппер скачивает бинарный RAT с C2-сервера и сохраняет его как /Library/Caches/com.apple.act.mond — замаскирован под системный демон Apple. Запускается через /bin/zsh.
Windows: PowerShell копируется в %PROGRAMDATA%\wt.exe (маскировка под Windows Terminal). VBScript-дроппер запускает скрытый PowerShell-скрипт с обходом Execution Policy.
Linux: Python-скрипт RAT скачивается в /tmp/ld.py и запускается через nohup в фоновом режиме.
Возможности RAT
При первом запуске RAT отправляет на C2-сервер «отпечаток» системы: hostname, имя пользователя, версию ОС, архитектуру CPU, часовой пояс, время установки ОС и загрузки, список процессов, а также содержимое директорий /Applications, ~/Library и ~/Application Support. Затем RAT опрашивает C2 каждые 60 секунд. Поддерживаемые команды:
- runscript — выполнение произвольных shell-команд и Python-кода
- peinject — загрузка и запуск дополнительных бинарных payload
- rundir — перечисление содержимого директорий
- kill — самоуничтожение процесса
Антифорензика
После выполнения дроппер удаляет себя (setup.js) и подменяет package.json чистой версией без postinstall-секции. При инспекции node_modules после заражения следов вредоносного скрипта не остаётся.
Это означает, что проверка node_modules постфактум бесполезна. Единственный надёжный способ определить компрометацию — проверить package-lock.json на наличие вредоносных версий и IoC-пути на файловой системе (см. ниже).
Кто обнаружил
Атаку независимо обнаружили несколько компаний: Socket задетектировал вредоносный plain-crypto-js через 6 минут после публикации. StepSecurity подтвердил компрометацию через AI Package Analyst и инструментирование GitHub Actions-раннера. Детальный технический разбор также опубликовала SafeDep.
Индикаторы компрометации (IoC)
Файловая система:
Сеть:
SHA256 хеши:
Что делать прямо сейчас
Быстрая проверка — есть ли вредоносные версии в вашем lockfile:
Если команда ничего не вернула — ваш проект не затронут. Если нашлись совпадения:
- Откатить axios:
npm install axios@1.14.0(для 1.x) илиnpm install axios@0.30.3(для 0.x) — это автоматически удалит plain-crypto-js - Проверить IoC-пути на файловой системе для вашей ОС (см. выше)
- Заблокировать C2 на сетевом уровне:
sfrclak[.]com/142.11.206.73 - Ротировать все секреты на затронутых системах: npm-токены, SSH-ключи, API-ключи, переменные из .env
- Проверить CI/CD-логи за 30–31 марта — ротировать все secrets из затронутых пайплайнов
- Перейти на
npm ci --ignore-scriptsв CI/CD как постоянную политику
Если обнаружены артефакты RAT — считайте систему полностью скомпрометированной и пересоберите из заведомо чистого состояния.
Защита от транзитивных зависимостей
Если axios используется как транзитивная зависимость (его тянет другой пакет), прямой npm install axios@1.14.0 не поможет — нужно зафиксировать версию через overrides в package.json:
Поле overrides работает в npm 8+, resolutions — в Yarn.
Частые вопросы
Какие версии axios скомпрометированы?
Скомпрометированы axios@1.14.1 и axios@0.30.4. Безопасные версии — 1.14.0 (для ветки 1.x) и 0.30.3 (для ветки 0.x). Обе вредоносные версии уже удалены из npm-реестра. Если вы не запускали npm install в период с 00:21 до 03:15 UTC 31 марта — ваш проект, скорее всего, не затронут.
Как понять, затронут ли мой проект?
Выполните в корне проекта команду grep -E 'axios@(1\.14\.1|0\.30\.4)|plain-crypto-js' package-lock.json. Если команда вернула результат — проект затронут: откатите axios, проверьте IoC-пути на файловой системе и ротируйте все секреты.
Нужно ли отказываться от axios?
Нет. Вредоносные версии удалены, аккаунт мейнтейнера восстановлен. Инцидент связан с компрометацией npm-аккаунта, а не с уязвимостью в коде самого axios. Рекомендуется закрепить версию 1.14.0, использовать lockfile и npm ci --ignore-scripts в CI/CD.
Как защититься от подобных атак?
Используйте lockfile и команду npm ci вместо npm install в CI/CD. Включите флаг --ignore-scripts для блокировки постустановочных скриптов. Следите за SLSA-провенансом пакетов — его отсутствие в новом релизе доверенного пакета является красным флагом. Инструменты вроде Socket и StepSecurity автоматизируют такой мониторинг.
Присвоен ли CVE?
На момент публикации CVE официально не присвоен. Инцидент задокументирован в GitHub issue #10604. Отчёт для генерации CVE подан, но номер пока не выделен. Следите за обновлениями issue — там же публикуются заявления мейнтейнеров о ходе расследования.
Выводы
Инцидент с axios — один из самых масштабных supply chain атак в npm по потенциальному охвату: при 100 миллионах загрузок в неделю даже 3-часовое окно доступности вредоносных версий критично. Для сравнения: компрометация event-stream в 2018 году затронула пакет с 2 миллионами загрузок в неделю.
Скорость реакции экосистемы впечатляет: Socket обнаружил вредоносный plain-crypto-js через 6 минут, npm отозвал пакеты менее чем за 3 часа. Но сам факт, что атакующему хватило одного украденного токена для публикации от имени доверенного мейнтейнера, ставит вопрос о необходимости обязательного использования OIDC Trusted Publishing для критической инфраструктуры npm.
Проверьте свои зависимости, ротируйте секреты и убедитесь, что ваш CI/CD-пайплайн защищён от автоматической установки непроверенных версий.