Безопасность экосистемы расширений для инструментов разработки вновь оказалась под угрозой. Эксперты обнаружили вредоносное расширение для популярного редактора кода Visual Studio Code (VS Code), которое более двух недель находилось в открытом репозитории Open VSX и было скачано более 5000 раз. Угроза имитирует легитимный инструмент - Angular Language Service - и использует сложные методы маскировки и обфускации для кражи конфиденциальных данных разработчиков, включая токены доступа к NPM и GitHub.
Описание
Расширение, замаскированное под сервис для работы с Angular, содержит как легальные зависимости, так и вредоносный код. Его главная особенность - активация при открытии любого HTML или TypeScript файла, что гарантирует запуск на машине разработчика. После активации расширение расшифровывает скрытую полезную нагрузку (payload) с помощью алгоритма AES-256-CBC, встроенной прямо в код. Этот процесс включает искусственную задержку в 500 миллисекунд, чтобы усложнить анализ.
Однако ключевая инновация угрозы заключается в механизме командования и управления (C2, Command and Control). Вместо использования традиционных серверов злоумышленники применяют технику, известную как Etherhiding. Первый этап вредоносного кода обращается к блокчейну Solana, извлекая конфигурационные данные из поля memo определённого кошелька. Этот подход обеспечивает анонимность, устойчивость к блокировкам и возможность динамического обновления инструкций без модификации самого расширения.
Интересно, что вредоносная программа содержит механизм геофильтрации. Перед выполнением основных действий она анализирует локаль, часовой пояс и смещение UTC системы. Если обнаруживаются признаки, указывающие на российский регион (например, языковой пакет ru_RU или часовой пояс Europe/Moscow), выполнение кода прекращается. Такая практика часто наблюдается у угроз, связанных с русскоязычными акторами, и, предположительно, служит для минимизации рисков преследования на внутреннем рынке.
Для обеспечения устойчивости (persistence) вредоносное ПО создаёт скрытый файл в системной директории пользователя, например, "init.json". Этот файл отслеживает временную метку последнего успешного выполнения, что позволяет контролировать периодичность активации. Кроме того, программа определяет операционную систему (Windows, macOS, Linux) для загрузки и выполнения соответствующего этапа атаки.
Конечная цель атаки - кража критически важных данных. Финальная полезная нагрузка представляет собой стилер (stealer), который целенаправленно ищет учётные данные разработчиков. Он сканирует системы на наличие файлов ".npmrc" для извлечения токенов аутентификации NPM, а также использует команду "git credential fill" для получения кэшированных паролей GitHub. Украденные токены немедленно проверяются на активность через запросы к соответствующим API.
Помимо этого, стилер ищет данные более чем 60 типов криптовалютных кошельков, включая MetaMask и Ledger Live. Чтобы получить доступ к заблокированным файлам браузеров, он принудительно завершает процессы Chrome и Firefox. Для скрытого исполнения может загружаться отдельный бинарный файл Node.js, а для обеспечения автозапуска создаются задания в Планировщике задач Windows или добавляются записи в реестр.
Собранные данные архивируются и отправляются на контролируемый злоумышленниками сервер. В качестве резервного канала связи для получения новых адресов C2 может использоваться публичная ссылка на Google Календарь.
Данный инцидент демонстрирует эволюцию атак на цепочку поставок программного обеспечения (supply-chain attacks). Использование легитимных репозиториев расширений, сложная обфускация и устойчивые децентрализованные механизмы C2 создают серьёзные проблемы для традиционных средств защиты. Угроза оставалась незамеченной в течение двух недель, что повышает вероятность того, что разработчики, имеющие доступ к критическим аккаунтам NPM или GitHub, могли стать её жертвами.
Этот случай подчёркивает необходимость повышенной бдительности со стороны разработчиков при выборе сторонних расширений и важность независимого аудита безопасности, особенно перед установкой инструментов, запрашивающих доступ к сетевым ресурсам или файловой системе. Ответственность за предотвращение публикации подобного кода лежит не только на сопровождающих маркетплейсов, но и на самом сообществе, которое должно активно сообщать о подозрительных активностях.
Индикаторы компрометации
IPv4
- 108.61.208.161
- 217.69.11.57
Extension ID
- angular-studio.ng-angular-extension
Solana address
- BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC
