Взлом Axios: как украденный токен открыл хакерам доступ к 100 миллионам проектов

30 марта 2026 года злоумышленники скомпрометировали npm-аккаунт jasonsaayman, ведущего мейнтейнера Axios — самого популярного HTTP-клиента во всей JavaScript-экосистеме. Пакет скачивают более 100 миллионов раз в неделю. Атакующие использовали украденный npm-токен, сменили привязанную к аккаунту почту на подконтрольный адрес ProtonMail и опубликовали две вредоносные версии: 1.14.1 и 0.30.4 (для устаревшей ветки 0.x). Ни один коммит, тег или релиз при этом не появился в официальном GitHub-репозитории — вредоносный код существовал только в npm-реестре. По данным TrendAI Vision One™ Threat Intelligence Hub и исследователя Яна Кенефика (Ian Kenefick), под удар попали организации из госсектора, финансов, ритейла, консалтинга, развлечений, промышленности, технологий, здравоохранения и коммунальных служб.
Взлом Axios: как украденный токен открыл хакерам доступ к 100 миллионам проектов
Изображение носит иллюстративный характер

Атака строилась на так называемой «фантомной зависимости» — пакете plain-crypto-js, который подтягивался как новая зависимость Axios. При установке срабатывал хук postinstall, запускавший скрипт setup.js. Этот скрипт был, по сути, дроппером кросс-платформенного трояна удалённого доступа (RAT). Злоумышленники намеренно обошли механизм OIDC Trusted Publisher в GitHub Actions, публикуя пакет вручную, а не через CI/CD-пайплайн. Это позволило обойти автоматические проверки подлинности, которые обычно привязывают публикацию к конкретному репозиторию и workflow.
Хронология инцидента уложилась в несколько часов. В 05:57 UTC 30 марта была опубликована «чистая» обманка plain-crypto-js — чтобы сформировать историю пакета в реестре. В 23:59 UTC того же дня вышла версия с вредоносной нагрузкой и postinstall-хуком node setup.js. Через шесть минут, в 00:05 UTC 31 марта, автоматические сканеры npm пометили plain-crypto-js как вредоносное ПО. В 00:21 UTC с аккаунта jasonsaayman вышел Axios 1.14.1. В 01:00 UTC — Axios 0.30.4, отравивший legacy-ветку. Примерно к 03:30 UTC администрация npm удалила скомпрометированные пакеты и отозвала токены.
Дроппер setup.js использовал несколько уровней обфускации. Строки хранились в массиве stq[], расшифровывались через функцию _trans_1 с XOR-шифром по ключу "OrDeR_7077" (фактический ключ — [0,0,0,0,0,0,7,0,7,7]) и формулой индекса (7rr) % 10. Вторая функция, _trans_2, переворачивала строку, заменяла подчёркивания на знаки равенства, декодировала base64 и передавала результат в _trans_1. Динамические вызовы require() разбивались через atob(), чтобы обойти grep-анализ. Идентификатор кампании — 6202033. После выполнения скрипт удалял сам себя через fs.unlink(__filename), удалял package.json и переименовывал заранее подготовленный чистый файл package.md в package.json. Следы уничтожались.
На каждой платформе дроппер вёл себя по-разному. На macOS он сбрасывал шаблон AppleScript по пути /Library/Caches/com.apple.act.mond — имя файла мимикрировало под системный демон Apple. Запуск шёл через /bin/zsh, обратная связь с C&C уходила на packages.npm.org/product0. На Windows выстраивалась цепочка из VBScript и PowerShell: бинарник PowerShell копировался в %PROGRAMDATA%\wt.exe, маскируясь под Windows Terminal. Промежуточные файлы — %TEMP%\6202033.vbs и %TEMP%\6202033.ps1. Исполнение было бесфайловым: конструкция [scriptblock]::Create() загружала код целиком в память. Адрес обратного вызова — packages.npm.org/product1. На Linux скачивался Python-RAT через curl, сохранялся в /tmp/ld.py и запускался через nohup с отвязкой от родительского процесса (orphaned к PID 1). Колбэк — packages.npm.org/product2.
Инфраструктура управления была развёрнута в тот же день. Основной домен sfrclak[.]com зарегистрирован 30 марта 2026 года в 16:03:46 UTC через Namecheap Inc. Резервный домен — callnrwise[.]com. IP-адрес сервера — 142.11.206[.]73, хостинг — Hostwinds LLC (AS54290, США). MX-записи указывали на eforward[1-5].registrar-servers.com. Основной URL обратного вызова — hxxp[://]sfrclak[.]com:8000/6202033, скрипт PowerShell загружался с hxxp[://]sfrclak[.]com:8000/6202033.ps1.
Атака затронула и побочные проекты. В связке с инцидентом упоминался скомпрометированный пакет @shadanai/openclaw — форк AI-шлюза OpenClaw. Среди упомянутых участников разработки Axios фигурирует также коллаборатор DigitalBrainJS.
По классификации MITRE ATT&CK инцидент покрывает множество техник: T1195.002 (компрометация цепочки поставок ПО), T1059.005 и T1059.001 (интерпретаторы VBScript и PowerShell), T1059.006 (Python), T1027 (обфускация), T1036 (маскировка), T1070.004 (удаление файлов для сокрытия следов), T1082 (обнаружение информации о системе), T1071.001 (протоколы прикладного уровня), T1620 (рефлективная загрузка кода).
Для немедленного реагирования рекомендуется удалить plain-crypto-js командой rm -rf node_modules/plain-crypto-js && npm install --ignore-scripts. Лучше не «чистить» окружение на месте, а пересобрать его из заведомо чистого состояния. Все npm-токены, ключи AWS, SSH-ключи, секреты CI/CD и значения из .env, которые могли быть скомпрометированы в этом окне, нужно ротировать. На сетевом уровне стоит заблокировать домен sfrclak.com и связанные IP-адреса. Разработчикам следует жёстко пиннить версии зависимостей, аудировать package-lock.json и применять npm ci --ignore-scripts в CI/CD. Операторам реестров рекомендовано принуждать к использованию OIDC Trusted Publisher, вводить обязательную проверку при смене email на аккаунтах с высоким числом загрузок и устанавливать 24-часовой карантин для новых пакетов.
SHA256-хеши вредоносных файлов: setup.js (Trojan.JS.AXIOSDROP.THCCABF) — e10b1fa84f1d6481625f741b69892780140d4e0e7769e7491e5f4d894c2e0e09; ld.py (Backdoor.Python.AXIOSRAT.THCCABF) — fcb81618bb15edfdedfb638b4c08a2af9cac9ecfa551af135a8402bf980375cf; три образца system.bat (Trojan.PS1.AXIOSDROP.THCCABF) — f7d335205b8d7b20208fb3ef93ee6dc817905dc3ae0c10a0b164f4e7d07121cd, ed8560c1ac7ceb6983ba995124d5917dc1a00288912387a6389296637d5f815c, 617b67a8e1210e4fc87c92d1d1da45a2f311c08d26e89b12307cf583c900d101. SHA-1 хеши вредоносных npm-пакетов: 5bb67e88846096f1f8d42a0f0350c9c46260591567612ff9af46f98d1b7571cd, d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71, 58401c195fe0a6204b42f5f90995ece5fab74ce7c69c67a24c61a057325af668. Шесть минут между публикацией и обнаружением сканерами — это и быстро, и страшно мало, если вспомнить, что за следующие три часа вредоносный Axios успели скачать неизвестное количество проектов по всему миру.


Новое на сайте

19695Как взлом видеоконференций TrueConf превратил обновления в оружие против правительств... 19694Квантовые компьютеры взломают самое надёжное шифрование при 10 000 кубитах — почему это... 19693Взлом Axios: как украденный токен открыл хакерам доступ к 100 миллионам проектов 19692Что скрывала затопленная пещера в Техасе от учёных тысячи лет? 19691Как китайская борьба со смогом ударила по Арктике 19690Почему Google заставляет разработчиков Android раскрывать личность, а Apple ужесточает... 19689Ахиллесова пята смертельных супербактерий 19688Когда код пишет машина: скрытая цена вайбкодинга 19687Почему красный чадор пугает больше, чем чёрный? 19686Как ИИ-агент в Google Cloud превращается в инсайдерскую угрозу? 19685ИИ против ИИ: как изменился смысл кибербезопасности 19684Artemis II: наса готовится запустить экипаж к луне 19683Почему Silver Fox атакует финансистов и менеджеров по всей Азии? 19682Гора аркану: магматическая шапка над кольцами древних художников 19681Пресная вода под солёным озером
Ссылка