Валентин | Продукт с нуля: post #538 — TG.ME

Axios скомпрометирован: троян удаленного доступа через npm

Я давно не про фронтенд канал веду, но эта штука касается всех, кто хоть раз писал npm install - а значит, практически каждого разработчика.

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

Вчера, 30 марта, злоумышленники угнали npm-аккаунт ведущего мейнтейнера axios (jasonsaayman) и залили две вредоносные версии: 1.14.1 и 0.30.4. Axios - самый популярный HTTP-клиент в JS, ~100 млн скачиваний в неделю, стоит примерно в 80% облачных окружений.

Как это работало

Ни одна строка кода axios не была изменена. В package.json тихо добавили зависимость [email protected], которая нигде в коде не импортируется. Вся ее задача - выполнить postinstall-скрипт, который за 2 секунды разворачивает кроссплатформенный RAT-дроппер под macOS, Windows и Linux. Еще до того, как npm закончит резолвить остальные зависимости, малварь уже стучится на C2-сервер.

Публикация обошла штатный CI/CD: атакующий подменил email мейнтейнера на proton.me и залил пакет напрямую через npm CLI украденным токеном. Ни коммита, ни тега в репозитории. Если смотреть на GitHub - ничего не видно, вредоносные версии существовали только в npm-реестре.

Хронология (UTC, 30-31 марта)

05:57 - публикация "чистого" [email protected] (создание видимости легитимности)
23:59 - выход 4.2.1 с payload
00:21 - [email protected]
01:00 - [email protected]
~03:29 - вредоносные версии удалены

Окно экспозиции - около 3 часов.

Что делает RAT

На каждом зараженном хосте - моментальная разведка: перечисление директорий, корней файловой системы, запущенных процессов. Все улетает на C2. Маяк каждые 60 секунд, готовность принимать команды: выполнение скриптов, инъекция бинарников в память, листинг файлов. На Windows дополнительно прописывается в автозагрузку через реестр и переживает ребут.

После запуска дроппер удаляет себя и подменяет свой package.json на чистую заглушку с версией 4.2.0. Следов почти не остается.

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

1. Проверить: ls node_modules/plain-crypto-js - если директория есть, дроппер был запущен
2. Откатиться на [email protected] или 0.30.3
3. Если затронуты - ротировать ВСЕ секреты: SSH-ключи, API-токены, облачные креды, npm-токены. Не in place, а revoke и перевыпуск
4. Не пытаться "чистить" машину - пересобирать с чистого снэпшота
5. Проверить логи CI/CD на соединения к sfrclak[.]com / 142.11.206.73

Главный вывод

npm-реестр принимает валидный токен как единственную границу аутентификации для публикации. Токен украден - все, никакие подписанные коммиты, branch protection и код-ревью не помогут. Пакет выходит от имени настоящего мейнтейнера и выглядит легитимно.

Pin-версии, npm ci --ignore-scripts в CI, проверка OIDC provenance у критичных зависимостей - это уже не опциональная гигиена, а необходимость.

Источники: StepSecurity (первооткрыватели), Huntress, Snyk, Wiz, GitHub Issue #10604
www.stepsecurity.io
axios Compromised on npm - Malicious Versions Drop Remote Access Trojan - StepSecurity
Hijacked maintainer account used to publish poisoned axios releases including 1.14.1 and 0.30.4. The attacker injected a hidden dependency that drops a cross platform RAT. We are actively investigating and will update this post with a full technical analysis.
😱9❤2🤝2
March 31, 2026 1.3K 23