Axios — один из самых популярных JavaScript-пакетов для HTTP-запросов, его скачивают больше 83 миллионов раз в неделю. 31 марта 2026 года через него начали распространять кроссплатформенный троян удалённого доступа. Атака была проведена через цепочку поставок: злоумышленник скомпрометировал npm-аккаунт основного мейнтейнера проекта и внедрил вредоносную зависимость в две ветки релизов.

Скомпрометированными оказались версии Axios 1.14.1 и 0.30.4. Атакующий получил доступ к учётной записи "jasonsaayman" — главного мейнтейнера Axios на npm. По всей видимости, был украден долгоживущий классический токен доступа npm. Почта аккаунта была изменена на адрес Proton Mail, контролируемый злоумышленником. Публикация заражённых версий шла напрямую через npm, полностью обходя CI/CD-пайплайн проекта на GitHub Actions. То есть код вообще не проходил через обычный процесс сборки и проверки.
Вредоносный код при этом не затронул исходники самого Axios. Вместо этого в runtime-зависимости пакета была добавлена библиотека "plain-crypto-js" версии 4.2.1, опубликованная с аккаунта "nrwise". Именно внутри этой фейковой библиотеки был спрятан обфусцированный Node.js-дроппер под названием "setup.js", запускавшийся через postinstall-скрипт. Схема была выстроена аккуратно: за 18 часов до основной атаки подготовили саму вредоносную зависимость, 30 марта 2026 года в 23:59 UTC опубликовали обновлённую версию "plain-crypto-js" с полезной нагрузкой, а 31 марта в 00:21 UTC уже вышла заражённая версия Axios. Вторая скомпрометированная версия появилась в 01:00 UTC. Обе ветки релизов были поражены в окне длиной 39 минут.
После установки дроппер обращался к серверу управления на домене sfrclak[.]com (порт 8000) и в зависимости от операционной системы выбирал одну из трёх веток атаки. На macOS запускался AppleScript, который загружал бинарный RAT на C++, сохранял его по пути /Library/Caches/com.apple.act.mond, делал исполняемым и запускал в фоне через /bin/zsh. После этого сам AppleScript удалялся. URL для получения нагрузки маскировался как . Троян снимал «отпечатки» системы, связывался с командным сервером каждые 60 секунд, мог запускать произвольные команды и шелл, обходить файловую систему и самоуничтожаться.
Для Windows схема была другой. Дроппер находил путь к PowerShell, записывал VBScript во временную директорию и использовал его для загрузки PowerShell-трояна. RAT сохранялся как %PROGRAMDATA%\wt.exe, маскируясь под приложение Windows Terminal. URL нагрузки — . На Linux и прочих системах через execSync запускалась shell-команда, скачивавшая Python-скрипт RAT в /tmp/ld.py и запускавшая его в фоне через nohup. Адрес загрузки — .
Отдельного внимания заслуживает механизм самоочистки. Малварь проходила три шага: удаляла postinstall-скрипт из директории установленного пакета, стирала вредоносный package.json с упоминанием postinstall-хука, а затем переименовывала чистый файл "package.md" (заранее включённый в plain-crypto-js) в "package.json". Если кто-то потом заглядывал в node_modules, следов заражения уже не было видно.
Исследователи из StepSecurity и лично Ашиш Курми обнаружили и описали атаку. Компания Socket параллельно выявила ещё два пакета, распространявших тот же самый малварь. Пакет @shadanai/openclaw в версиях 2026.3.28-2, 2026.3.28-3, 2026.3.31-1 и 2026.3.31-2 содержал "plain-crypto-js", спрятанный глубоко в вендорных зависимостях. А пакет @qqbrowser/openclaw-qbot версии 0.0.130 поставлялся с уже модифицированной версией Axios прямо внутри своих node_modules.
Что делать тем, кого это коснулось? Первым делом — ротация всех секретов и учётных данных. Axios нужно откатить на версию 1.14.0 или 0.30.3. Пакет "plain-crypto-js" надо вычистить из node_modules вручную. На сетевом уровне стоит заблокировать исходящий трафик к домену sfrclak[.]com. Необходимо проверить логи CI/CD на предмет сборок, которые устанавливали заражённые версии.
И, наконец, нужно поискать на серверах и рабочих машинах артефакты: /Library/Caches/com.apple.act.mond на macOS, %PROGRAMDATA%\wt.exe на Windows, /tmp/ld.py на Linux. Если что-то из этого найдено — систему следует считать полностью скомпрометированной. Не «возможно скомпрометированной», а именно полностью. Со всеми вытекающими из этого мерами реагирования.

Изображение носит иллюстративный характер
Скомпрометированными оказались версии Axios 1.14.1 и 0.30.4. Атакующий получил доступ к учётной записи "jasonsaayman" — главного мейнтейнера Axios на npm. По всей видимости, был украден долгоживущий классический токен доступа npm. Почта аккаунта была изменена на адрес Proton Mail, контролируемый злоумышленником. Публикация заражённых версий шла напрямую через npm, полностью обходя CI/CD-пайплайн проекта на GitHub Actions. То есть код вообще не проходил через обычный процесс сборки и проверки.
Вредоносный код при этом не затронул исходники самого Axios. Вместо этого в runtime-зависимости пакета была добавлена библиотека "plain-crypto-js" версии 4.2.1, опубликованная с аккаунта "nrwise". Именно внутри этой фейковой библиотеки был спрятан обфусцированный Node.js-дроппер под названием "setup.js", запускавшийся через postinstall-скрипт. Схема была выстроена аккуратно: за 18 часов до основной атаки подготовили саму вредоносную зависимость, 30 марта 2026 года в 23:59 UTC опубликовали обновлённую версию "plain-crypto-js" с полезной нагрузкой, а 31 марта в 00:21 UTC уже вышла заражённая версия Axios. Вторая скомпрометированная версия появилась в 01:00 UTC. Обе ветки релизов были поражены в окне длиной 39 минут.
После установки дроппер обращался к серверу управления на домене sfrclak[.]com (порт 8000) и в зависимости от операционной системы выбирал одну из трёх веток атаки. На macOS запускался AppleScript, который загружал бинарный RAT на C++, сохранял его по пути /Library/Caches/com.apple.act.mond, делал исполняемым и запускал в фоне через /bin/zsh. После этого сам AppleScript удалялся. URL для получения нагрузки маскировался как . Троян снимал «отпечатки» системы, связывался с командным сервером каждые 60 секунд, мог запускать произвольные команды и шелл, обходить файловую систему и самоуничтожаться.
Для Windows схема была другой. Дроппер находил путь к PowerShell, записывал VBScript во временную директорию и использовал его для загрузки PowerShell-трояна. RAT сохранялся как %PROGRAMDATA%\wt.exe, маскируясь под приложение Windows Terminal. URL нагрузки — . На Linux и прочих системах через execSync запускалась shell-команда, скачивавшая Python-скрипт RAT в /tmp/ld.py и запускавшая его в фоне через nohup. Адрес загрузки — .
Отдельного внимания заслуживает механизм самоочистки. Малварь проходила три шага: удаляла postinstall-скрипт из директории установленного пакета, стирала вредоносный package.json с упоминанием postinstall-хука, а затем переименовывала чистый файл "package.md" (заранее включённый в plain-crypto-js) в "package.json". Если кто-то потом заглядывал в node_modules, следов заражения уже не было видно.
Исследователи из StepSecurity и лично Ашиш Курми обнаружили и описали атаку. Компания Socket параллельно выявила ещё два пакета, распространявших тот же самый малварь. Пакет @shadanai/openclaw в версиях 2026.3.28-2, 2026.3.28-3, 2026.3.31-1 и 2026.3.31-2 содержал "plain-crypto-js", спрятанный глубоко в вендорных зависимостях. А пакет @qqbrowser/openclaw-qbot версии 0.0.130 поставлялся с уже модифицированной версией Axios прямо внутри своих node_modules.
Что делать тем, кого это коснулось? Первым делом — ротация всех секретов и учётных данных. Axios нужно откатить на версию 1.14.0 или 0.30.3. Пакет "plain-crypto-js" надо вычистить из node_modules вручную. На сетевом уровне стоит заблокировать исходящий трафик к домену sfrclak[.]com. Необходимо проверить логи CI/CD на предмет сборок, которые устанавливали заражённые версии.
И, наконец, нужно поискать на серверах и рабочих машинах артефакты: /Library/Caches/com.apple.act.mond на macOS, %PROGRAMDATA%\wt.exe на Windows, /tmp/ld.py на Linux. Если что-то из этого найдено — систему следует считать полностью скомпрометированной. Не «возможно скомпрометированной», а именно полностью. Со всеми вытекающими из этого мерами реагирования.