Исследователи израильской компании JFrog обнаружили в реестре npm высокоопасный вредоносный пакет, который под видом легального инструментария для разработчиков внедряет на системы жертв многостадийную нагрузку. Пакет под названием @openclaw-ai/openclawai маскируется под установщик CLI-утилиты OpenClaw, однако его реальная цель - кража системных учётных данных, данных браузеров, криптокошельков, SSH-ключей и установка полнофункционального удалённого доступа (RAT). Этот инцидент демонстрирует, как злоумышленники используют доверие к экосистеме открытого ПО для проведения сложных целенаправленных атак.
Описание
Основная угроза заключается в комплексном подходе атаки. Вредоносная программа, внутренне именуемая GhostLoader, не ограничивается простым сбором файлов. Она использует социальную инженерию для получения пароля системы, что в дальнейшем позволяет расшифровать защищённые хранилища macOS Keychain и браузеров. После первоначального сбора данных внедряется резидентный модуль с функциями трояна удалённого доступа, включая создание SOCKS5-прокси и клонирование активных сессий браузеров для полного контроля над действиями жертвы.
Атака начинается с установки пакета через npm. Файл package.json выглядит абсолютно легитимным, экспортируя безобидную утилиту useAsyncState. Однако реальная вредоносная логика скрыта в директории scripts/. Ключевым элементом является хуk postinstall, который автоматически переустанавливает пакет глобально, добавляя в переменную PATH системы бинарный файл openclaw. Этот файл, в свою очередь, является обфусцированным дроппером первой стадии.
Первая стадия представляет собой искусно сконструированный социальный инженерный трюк. При запуске скрипт отображает реалистичный интерфейс CLI-установщика с анимированными индикаторами прогресса, имитируя обычный процесс настройки. После его завершения пользователю выводится поддельное окно авторизации Keychain с просьбой ввести пароль администратора для «безопасной инициализации хранилища». Для повышения правдоподобности скрипт до пяти раз валидирует введённый пароль через штатные механизмы операционной системы (dscl на macOS, su на Linux, PowerShell на Windows), выводя сообщение об ошибке в случае неудачи, точно копируя поведение ОС.
Пока пользователь взаимодействует с фальшивым интерфейсом, в фоновом режиме происходит зашифрованная загрузка второй стадии. URL-адрес и путь к управляющему серверу (C2) закодированы с помощью XOR, чтобы избежать статического обнаружения. Полезная нагрузка передаётся в виде JSON с двумя полями: зашифрованным контентом и ключом для его расшифровки по алгоритму AES-256-GCM. Расшифрованный JavaScript-код записывается во временный файл и запускается как отдельный фоновый процесс, после чего временный файл удаляется, а установка npm завершается без видимых ошибок.
Вторая стадия, GhostLoader, представляет собой обширный фреймворк для сбора данных и удалённого управления. Сначала он обеспечивает своё постоянное присутствие в системе. Скрипт копирует себя в скрытую директорию, замаскированную под службу телеметрии npm (например, ~/.cache/.npm_telemetry/monitor.js). Для автозапуска он добавляет строки в конфигурационные файлы оболочки пользователя (.zshrc, .bashrc) и, в случае Linux, создаёт задание в cron. Эти записи также маскируются под легитимные комментарии о «службе интеграции телеметрии NPM».
На первом запуске модуль выполняет исчерпывающий сбор информации, для которого установлен жёсткий лимит в 10 минут. Данные отправляются в Telegram и включают украденный пароль, имя хоста, IP-адрес и спецификации системы. Сбор данных носит тотальный характер: это и файлы ключей SSH, и конфигурации облачных сервисов (AWS, Azure, GCP, Kubernetes), и учётные данные разработчика (.npmrc, .git-credentials), и даже настройки AI-агентов, таких как ZeroClaw или PicoClaw. Особое внимание уделяется криптовалютной сфере: сканируются файлы на наличие сид-фраз, извлекаются данные из десктопных кошельков (Exodus, Electrum, Ledger Live) и браузерных расширений (MetaMask, Phantom). Если на macOS было получено разрешение на полный доступ к диску, зловред также крадёт историю iMessage, заметки Apple Notes и данные Safari.
Кража данных из браузеров реализована на высоком уровне. При наличии пароля системы модуль расшифровывает мастер-ключ из Keychain, что позволяет извлечь пароли, платёжные данные и cookies из всех Chromium-браузеров. Для файлов cookie, устойчивых к извлечению из SQLite, используется Chrome DevTools Protocol (CDP): запускается headless-браузер, который программно выгружает все cookies. Вся собранная информация архивируется и эксфильтрируется через несколько каналов: на панель управления злоумышленника, через Telegram Bot API или на файлообменник GoFile.io.
После выполнения первоначального сбора модуль переходит в резидентный режим, реализуя функции полноценного RAT. Он начинает мониторинг буфера обмена, проверяя его содержимое на соответствие регулярным выражениям для поиска приватных ключей, seed-фраз, API-токенов (AWS, OpenAI, Stripe) и криптовалютных адресов. Любое совпадение немедленно отправляется атакующему. Модуль также может в реальном времени отслеживать новые сообщения в iMessage.
Сердцем резидентного режима является система получения команд с C2. Модуль опрашивает сервер каждые 25 секунд и может выполнять широкий спектр инструкций. Команда EXEC позволяет выполнять произвольные shell-команды, GRAB - выгружать конкретные файлы или директории, UPDATE - загружать и устанавливать обновлённую версию вредоноса. Наиболее опасными возможностями являются PROXY_START для развёртывания на машине жертвы SOCKS5-прокси, через который атакующий может выходить в сеть, и CLONE_START. Последняя команда позволяет полностью скопировать профиль браузера жертвы, запустить его в headless-режиме и передать управление им через CDP напрямую злоумышленнику, давая тому доступ ко всем активным сессиям без необходимости знания паролей. Для скрытия следов предусмотрена команда NUKE, которая удаляет все следы присутствия вредоноса из системы.
Аналитики JFrog обнаружили этот пакет в ходе рутинного мониторинга реестра. Они отмечают, что атака выделяется широтой сбора данных, изощрённостью социальной инженерии и качеством реализации механизмов закрепления в системе и управления. Пакет был удалён из реестра npm, однако пользователям, которые могли его установить, необходимо срочно принять меры.
Специалистам по безопасности и разработчикам следует рассматривать любые пакеты npm, которые запрашивают системные пароли, используют хуки postinstall для глобальной установки или загружают исполняемые полезные нагрузки с удалённых серверов, как потенциально опасные. Для защиты от подобных угроз критически важны принципы минимальных привилегий, использование виртуальных сред для изоляции проектов, регулярный аудит зависимостей и наличие систем мониторинга необычной активности, таких как SIEM (класс программных продуктов для управления событиями ИБ). В случае компрометации необходимо не только удалить вредоносный код, но и сменить все потенциально скомпрометированные учётные данные, включая пароли системы, SSH-ключи, API-токены и сессии в браузерах. Учитывая глубину возможного доступа, самым надёжным решением может стать полная переустановка операционной системы.
Индикаторы компрометации
Package Name
- @openclaw-ai/openclawai
Package Type NPM
- Versions 1.5.15,1.5.14
- XRAY-ID XRAY-949975
C2 Domain
- https:\\trackpipe.dev
Bootstrap Path
- /t/bootstrap?t=fafc0e77-9c1b-4fe1-bf7e-d24d2570e50e
Campaign ID
- complexarchaeologist1
Install Directory
- ~/.cache/.npm_telemetry/
Executable Name
- monitor.js
Temp File Pattern
- /tmp/sys-opt-*.js
Shell Hook Comment
- # NPM Telemetry Integration Service
Cron Comment
- # Node.js Telemetry Collection
Encryption
- AES-256-GCM (16-byte IV, 16-byte auth tag)
Geo Lookup
- hееps://ipinfo.io/json
File Upload Fallback
- GoFile.io API
Exfiltration
- Telegram Bot API C2 panel upload
Environment Variables
- NODE_AUTH_TOKEN, NODE_CHANNEL, NPM_CONFIG_TAG, GHOST_RECOLLECT, GHOST_TG_CONFIG