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 с половиной часа.
Всем, кто установил axios@1.14.1 или axios@0.30.4, рекомендуется проверить наличие директории plain-crypto-js в node_modules. Её присутствие означает, что дроппер был запущен, даже если npm list не показывает версию 4.2.1.
Зависимость необходимо удалить, а все секреты, SSH-ключи и токены на затронутых машинах считать скомпрометированными.
@ai_machinelearning_big_data
#news #ai #ml
