Дослідники JFrog виявили три шкідливі npm-пакети — aes-decode-runner-pro, postcss-minify-selector і postcss-minify-selector-parser, — які маскуються під легітимні інструменти збірки та доставляють багатоступеневий троян віддаленого доступу (RAT) для Windows. Пакети зловживають довірою розробників до екосистеми PostCSS: назва postcss-minify-selector-parser імітує postcss-selector-parser — легітимну бібліотеку з більш ніж 127 мільйонами щотижневих завантажень. Сукупно шкідливі пакети були завантажені понад 1000 разів. Розробникам, які встановили будь-який із цих пакетів, необхідно негайно видалити їх, очистити артефакти та провести ротацію всіх облікових даних на уражених машинах.
Механізм атаки: від npm install до повноцінного RAT
За даними дослідників, усі три пакети були опубліковані за останній місяць користувачем abdrizak. Пакети aes-decode-runner-pro і postcss-minify-selector-parser подаються як утиліти для AES-кодування та залежать від легітимного postcss-selector-parser. Пакет postcss-minify-selector позиціонується як мініфікатор CSS-селекторів і залежить від postcss-minify-selector-parser. Незалежно від того, який із трьох пакетів установлено, ланцюжок атаки призводить до розгортання одного й того самого шкідливого ПЗ.
Ланцюжок зараження складається з кількох етапів:
- JavaScript-дроппер, вбудований у пакет, записує на диск PowerShell-скрипт
settings.ps1і запускає його. - PowerShell-завантажувач завантажує наступну стадію з зовнішнього сервера
nvidiadriver[.]netчерезcurl.exe. - Завантажений ZIP-архів містить VBS-файл
update.vbs, середовище виконання Python, завантажувачloader.pyі набір скомпільованих модулів Python (.pyd), зібраних за допомогою Nuitka. - VBS-скрипт налаштовує Python-оточення та запускає
loader.py, який активує основну логіку RAT.
Модульна архітектура трояна
RAT реалізовано через набір нативних модулів Python, кожен з яких відповідає за окрему функцію:
- config.pyd — константи, ідентифікатори команд, URL сервера керування, імена ключів реєстру
- api.pyd — обмін пакетами з C2-сервером через HTTP
- audiodriver.pyd — основний цикл оркестрації RAT (назву обрано для маскування)
- command.pyd — профілювання хоста, перевірка віртуальних машин, передавання файлів, виконання команд оболонки
- auto.pyd — крадіжка облікових даних і даних розширень Google Chrome з обходом механізму App-Bound Encryption (ABE)
- util.pyd — допоміжні функції для роботи з tar/gzip-архівами
Обхід ABE — захисного механізму Chrome, який прив’язує шифрування до конкретного застосунку, — робить цей RAT особливо небезпечним для розробників, що зберігають у браузері паролі та токени доступу до репозиторіїв, CI/CD-систем і хмарних сервісів.
Індикатори компрометації
- C2-сервер:
95.216.92[.]207:8080 - Домен завантаження корисного навантаження:
nvidiadriver[.]net
Хвиля атак на ланцюг постачання npm
Виявлення цих пакетів збіглося з кількома іншими кампаніями, націленими на екосистему npm, що вказує на системне зростання атак на ланцюг постачання через менеджери пакетів:
- Пакет apintergrationpost, за даними SafeDep, доставляє Linux RAT під назвою MYRA. Як повідомляється, він компілює нативний C-руткит під час встановлення, створює три механізми закріплення, маскується під сервіс systemd і підтримує безфайлове виконання.
- Пакет @withgoogle/stitch-sdk, за даними SafeDep, імітує інструмент Google Stitch AI та викрадає облікові дані розробників із восьми джерел: Claude Code, git config, ~/.git-credentials, SSH-ключі, GitHub CLI, npm config, ~/.npmrc і ~/.docker/config.json. Дані надсилаються на домен
stitch-production[.]org. - Кластер із п’яти пакетів (procwire, routecraft, endpointmap, bytecraft, staticlayer), які доставляють і запускають дроппер на Windows-хостах під час виконання npm install.
Окремо SafeDep задокументувала атаку на ланцюг постачання через проєкт Egonex-AI/Understand-Anything, де шкідливий код використовує блокчейн Tron як інфраструктуру керування — адреса останньої транзакції кодує геш BSC-транзакції з активним корисним навантаженням.
Оцінка впливу
Попри відносно невелику кількість завантажень (сукупно близько 1016), основна небезпека полягає в цільовій аудиторії: пакети націлені на розробників, які використовують PostCSS — один із найпопулярніших інструментів обробки CSS. Компрометація машини розробника відкриває доступ до приватних репозиторіїв, секретів CI/CD, токенів хмарних провайдерів і ключів підпису. Модуль auto.pyd, що спеціалізується на крадіжці даних Chrome, зокрема розширень, може витягти токени менеджерів паролів і сесії автентифікації.
Використання домену nvidiadriver[.]net для завантаження корисного навантаження — характерний прийом соціальної інженерії: назва домену імітує легітимне ПЗ NVIDIA і може не викликати підозр під час побіжного аналізу мережевого трафіку.
Рекомендації з реагування
- Перевірити залежності проєктів на наявність пакетів aes-decode-runner-pro, postcss-minify-selector, postcss-minify-selector-parser, apintergrationpost, @withgoogle/stitch-sdk, procwire, routecraft, endpointmap, bytecraft, staticlayer.
- Видалити шкідливі пакети й усі артефакти: файли
settings.ps1,update.vbs,loader.py, каталоги із середовищем виконання Python і модулями.pyd. - Перевірити мережеві підключення до
95.216.92[.]207:8080,nvidiadriver[.]netіstitch-production[.]orgу журналах proxy та DNS. - Провести ротацію всіх облікових даних на уражених машинах: паролів Chrome, SSH-ключів, токенів GitHub/npm/Docker, секретів CI/CD.
- Запровадити політики перевірки залежностей: використовувати інструменти аудиту (npm audit, Socket, Snyk) та блокувати встановлення пакетів без перевірки за допомогою lockfile і політик дозволених пакетів.
- Налаштувати моніторинг запуску PowerShell і wscript.exe з каталогів node_modules — це аномальна поведінка для npm-пакетів.
Цей випадок наочно демонструє, що навіть невеликий допоміжний пакет, який імітує популярну залежність для збірки, може приховувати повноцінну багатоступеневу атаку. Ключова дія для команд розробки — негайно перевірити свої проєкти на наявність перелічених пакетів, заблокувати зазначені індикатори компрометації на рівні мережевої інфраструктури та запровадити автоматизований аудит залежностей як обов’язковий етап CI/CD-pipeline.