Библиотека axios скомпрометирована трояном удалённого доступа
30 марта злоумышленники опубликовали в npm 2 вредоносные версии библиотеки axios. Версии 1.14.1 и 0.30.4 содержали скрытый установщик кроссплатформенного RAT — инструмента скрытого удалённого доступа.
JavaScript-библиотека Axios широко распространена в экосистеме разработки ИИ-решений — она обеспечивает HTTP-взаимодействие между клиентскими интерфейсами и API (OpenAI, Anthropic, LangChain).
Компрометацию обнаружила компания StepSecurity — её ИИ-анализатор пакетов зафиксировал аномальные исходящие соединения к домену sfrclak[dot]com в CI-пайплайнах открытых проектов.
Это одна из самых технически изощрённых атак на цепочку поставок, когда-либо зафиксированных в экосистеме npm.
Атакующие получили доступ к npm-аккаунту ведущего мейнтейнера проекта jasonsaayman и подменили привязанный email. Публикация обошла штатный CI/CD-пайплайн: все легитимные релизы axios 1.x выходят через GitHub Actions с криптографической привязкой по OIDC, а вредоносная версия была залита напрямую с украденным npm-токеном — без привязки к коммиту или тегу в репозитории.
Сам код axios не менялся ни на строку. Единственным изменением в package.json стало добавление зависимости plain-crypto-js@4.2.1 — пакета, который нигде в исходниках axios не импортируется. Его единственная задача — выполнить скрипт, запускающий RAT-дроппер для macOS, Windows и Linux. В течение 2 секунд после npm install вредонос устанавливал соединение с сервером — ещё до того, как npm заканчивал разрешение остальных зависимостей.
После запуска дроппер удалял себя и подменял свой package.json на чистую заглушку с номером версии 4.2.0 вместо 4.2.1.
Проведённое расследование установило, что операция была спланирована заранее. За 18 часов до атаки злоумышленник зарегистрировал чистый клон легитимного crypto-js, создающий видимость нормальной истории публикаций. Затем вышла версия 4.2.1 с вредоносным postinstall-хуком. Обе ветки axios — актуальная 1.x и устаревшая 0.x — были инфицированы с интервалом в 40 минут.
Вредоносные версии axios оставались в реестре npm около 3 часов, после чего были удалены. Пакет plain-crypto-js продержался примерно 4,5 часа.
Всем, кто установил axios@1.14.1 или axios@0.30.4, рекомендуется проверить наличие директории plain-crypto-js в node_modules. Её присутствие означает, что дроппер был запущен, даже если npm list не показывает версию 4.2.1. Зависимость необходимо удалить, а все секреты, SSH-ключи и токены на затронутых машинах считать скомпрометированными.
Источник: https://x.com/Machinelearrn/status/2039019675003027819