Стилер в расширениях VS Code: кошельки и ключи уходят через Telegram-бота

10.08.2026 6 мин 7

Пара вредоносных расширений для VS Code под именем Solidity Pro месяцами выглядела как обычный инструмент разработчика, прежде чем превратиться в похитителя учётных данных. Yeeth Security опубликовала разбор 6 августа 2026 года, и главное в нём не начинка, а терпение: вредоносный код ждёт от двенадцати до семидесяти двух часов после установки, прежде чем запуститься. К этому моменту сканер магазина уже отработал, а разработчик уже решил, что расширение полезное.

Что на самом деле делали расширения Solidity Pro

Расширения выходили под несколькими издателями, среди них helper-beeps.solidity-pro и web3devtoolsx.solidity-pro, в каталогах Open VSX и VS Code Marketplace. Они выдавали себя за инструмент для Solidity - языка, на котором пишут смарт-контракты Ethereum. Аудитория тут для атакующего удобная: люди, у которых ключи от кошельков лежат на рабочей машине.

Поведение менялось вместе с номером версии. Выпуски с 1.0.0 по 2.4.x работали загрузчиком: стучались на эндпоинты Cloudflare Workers, забирали зашифрованную AES-GCM полезную нагрузку на Python и запускали её через child_process.spawn. Версии 2.4.7 и 2.4.8 сохранили тот же скелет с более плотной обфускацией. Начиная с 3.0.0 расширение несло полноценного похитителя криптокошельков, а самые новые версии вообще отказались от ступени с Cloudflare в пользу выгрузки прямо в Telegram-бота. Издатель web3devtoolsx выпускал ещё и чистые безобидные сборки под номерами 1.0.0 и 4.0.0 - именно так пакет обзаводится правдоподобной историей.

Что забирает похититель криптокошельков

Список добычи читается как опись всей рабочей жизни разработчика. По учётным данным: токены GitHub в форматах ghp_ и github_pat_, токены GitLab glpat-, ключи и сессионные токены AWS, токены Cloudflare, ключи OpenAI и Anthropic, токены Telegram-ботов. По криптографии: приватные ключи SSH, ключи Bitcoin в форматах WIF и xprv, мнемонические seed-фразы и хранилища кошельков MetaMask, Phantom, Rabby, Coinbase, Trust и Keplr. Заодно собираются учётные данные, вшитые в адреса, и MFA-токены 1Password.

Важно: seed-фраза - это не пароль. Тут нет сброса, нет службы поддержки и нет отката транзакции. Если её когда-либо хранили, набирали или вставляли на машине, где работала заражённая версия, правильно исходить из того, что средства за ней уже ушли, и единственное полезное действие - перевести их в кошелёк, ключи которого эта машина никогда не видела.

Как это прошло проверку: от двенадцати до семидесяти двух часов терпения

Задержка задана случайным интервалом от двенадцати до семидесяти двух часов после установки. Перед активацией нагрузка проверяет переменные окружения, выдающие автоматическую среду, в том числе CI, GITHUB_ACTIONS, JENKINS_HOME и GITPOD_WORKSPACE_ID, и остаётся спящей, если находит их. Сканер, который ставит пакет, смотрит на него несколько минут и идёт дальше, увидит помощник для Solidity, который не делает ничего необычного, - потому что в этот момент он действительно не делает ничего необычного.

Остальное - ремесло, а не новизна: адреса эндпоинтов хранятся шестнадцатеричными кусками и собираются во время работы, строки разрезаны по таблицам самовызывающихся функций, base64-блобы прогоняются через eval(), а имена методов меняются от выпуска к выпуску, чтобы сигнатура на одну версию не подошла к следующей. Ранние версии для отвода глаз ещё и делали запрос к публичному ценовому API CoinGecko - ровно то, что делал бы настоящий инструмент для крипторазработки.

Сценарий WhiteCobra и накрученные счётчики загрузок

Yeeth связывает эту кампанию с WhiteCobra - группой, которая с 2025 года заваливает каталоги расширений, - но отмечает, что артефакты различаются достаточно, чтобы считать это совпадением по поведению, а не побайтовым. Сравнение полезно, потому что у группы утёк собственный план. В сентябре 2025 года Koi Security опубликовала файл под названием "DEPLOYMENT PLAN: Operation Solidity Pro", найденный в кампании из 24 вредоносных расширений в VS Code Marketplace и Open VSX.

Написан он как план запуска продукта. Пять фаз: упаковать, выложить, продвинуть, накрутить, вывести. Стадия продвижения описывает шаблоны для соцсетей и ботов, стадия накрутки предписывает гонять скрипт, пока у расширения не наберётся 50 000 загрузок, - в формулировке самого плана, чтобы "обеспечить социальное доказательство для разработчиков, которые найдут расширение". Оценка выручки - от 10 000 до 500 000 долларов в час в зависимости от того, чей кошелёк попадётся. Практический вывод прямолинейный: счётчик загрузок - это число, которым управляет атакующий, поэтому убеждать вас оно не должно.

Что делать сейчас

  • Проверить, что установлено, а не что вы помните: оба расширения Solidity Pro убраны из Open VSX, но удаление из каталога ничего не удаляет с машины, где пакет уже стоит.
  • Считать попадание полной компрометацией доступов: сменить токены GitHub, GitLab, AWS, Cloudflare и ключи API, перевыпустить ключи SSH, а крипту перевести в кошелёк, созданный на чистом устройстве. Ротации одного токена мало, когда похититель забрал весь набор.
  • Смотреть на издателя, а не на счётчик: счётчик накручивают намеренно. Незнакомый издатель с внушительными цифрами и короткой историей - ровно тот профиль, который описан в плане.
  • Держать seed-фразы вне машины для разработки: аппаратный кошелёк оставляет подписывающие ключи там, куда расширение редактора не дотянется.
  • Проверять расширения по расписанию: удалять то, чем больше не пользуетесь. Каждое установленное расширение работает с вашими правами и тихо обновляется само.
  • Замечать то, чего редактор делать не должен: расширение, запускающее powershell, cmd, mshta, cscript или curl, стоит вынести в оповещения любого средства защиты, которое у вас и так работает.

Почему это важно не только разработчикам

Машина разработчика - это универсальный ключ. Лежащие на ней доступы открывают конвейеры, которые собирают софт, устанавливаемый другими людьми, поэтому такая кража редко останавливается на первой жертве. Та же логика прошла через дыру в VS Code, где один клик отдавал репозитории GitHub, и через агентов для кода, у которых сообщение на GitHub доезжало до секретов сборки. Здесь же сетевые инструменты приватности перестают быть при чём, и сказать это прямо полезнее, чем продавать: VPN шифрует соединение, которое устанавливает расширение, но не решает, должно ли расширение его устанавливать. Блокировка известных командных доменов на уровне DNS - реальная, хотя и частичная защита от ступени загрузчика, но код, который вы поставили сами и которому сами выдали права, - это не сетевая проблема.

Вывод

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

vs codemicrosoftsolidity prowhitecobrayeeth securitykoi securityopen vsxgithubgitlabawscloudflaretelegrammetamaskphantomcoinbasetrust wallet1passwordethereumcryptocurrencymalwaresupply chaincybersecuritysecurityprivacyvpn

Читайте также