Расширения Microsoft Visual Studio Code под названием Solidity Pro оказались инструментами кражи данных. Исследователи обнаружили два пакета: helper-beeps.solidity-pro и web3devtoolsx.solidity-pro. Они собирали профили браузеров и сохранённые учётные данные, браузерные криптокошельки, сведения о других кошельках, токены систем контроля версий, API-ключи, SSH-ключи и токены Telegram-ботов. Украденное отправлялось операторам через загрузку в Telegram-бот. На момент публикации обоих расширений уже не было в Open VSX, но репозиторий web3devtoolsx/solidity-pro на GitHub оставался доступен.

По данным Yeeth Security, вредоносная схема менялась вместе с версиями. Релизы от 1.0.0 до ветки 2.4.x обращались к конечным точкам Cloudflare Workers, получали оттуда зашифрованную полезную нагрузку на Python и запускали её на компьютере жертвы. Начиная с версии 3.0.0, Solidity Pro превратился в полноценный похититель информации: искал браузерные профили, криптовалютные кошельки, токены доступа к исходному коду, API- и SSH-ключи, а также токены Telegram-ботов. Такой набор позволял атаковать уже не один кошелёк, а рабочую инфраструктуру разработчика.
Вредоносная ветка запускалась с задержкой, когда пользователь успевал проверить расширение в работе и решить, что оно полезно. Короткие автоматические проверки к этому времени обычно уже заканчивались. Yeeth Security описала расчёт разработчиков так: «К тому времени, когда запускается вредоносная ветка, пользователь уже решил, что расширение полезно, а автоматические сканеры, наблюдающие за пакетом лишь несколько минут, успели перейти к следующей проверке». Маскировка тоже была рабочим механизмом, а не косметикой: строки разбивались между таблицами IIFE, собирались во время исполнения, а названия методов менялись от релиза к релизу. IIFE, Immediately Invoked Function Expression, означает JavaScript-выражение функции, которое выполняется сразу после объявления. Как пояснила Yeeth Security, «Обфускация здесь не декоративна: она разделяет строки между таблицами IIFE, заново собирает их во время исполнения и меняет имена методов между выпусками, поэтому сигнатурным средствам обнаружения приходится отслеживать постоянно движущуюся цель».
Эта тактика совпадает с общей схемой кластера WhiteCobra, обнаруженного в сентябре 2025 года. WhiteCobra распространял Lumma Stealer через вредоносные расширения VS Code, спрятанные под видом обычных инструментов разработки. В случае Solidity Pro использовалась та же ставка на доверие программиста к редактору и его экосистеме: установленное расширение получает удобную позицию рядом с исходным кодом, терминалом, буфером обмена, браузерными сессиями и секретами проекта.
В июне 2026 года Yeeth Security уже выявляла поддельное расширение ethdevtools.solidity-language-support. Оно выдавало себя за средство поддержки языка Solidity для разработчиков Ethereum, но содержало похититель буфера обмена с отложенным запуском. Код искал мнемонические фразы BIP-39, закрытые ключи Ethereum и адреса криптовалютных кошельков. Если в буфере обнаруживался известный формат криптоадреса, расширение подменяло его адресом злоумышленника. Пользователь мог проверить первые и последние символы невнимательно или вообще не проверить и отправить средства не тому получателю.
Подмена выполнялась через штатный API vscode.env.clipboard.writeText. Для неё не требовались child_process, сетевое подключение или запись файлов, поэтому сканер, ищущий лишь подозрительные импорты Node.js, мог ничего не заметить. Формулировка Yeeth Security была прямой: «Когда в буфере обмена находится распознанный криптоадрес, расширение заменяет вставляемое значение адресом, контролируемым злоумышленником». Исследователи добавили: «Подмена происходит через vscode.env.clipboard.writeText, штатный вызов API, которому не нужны child_process, доступ к сети и запись файлов. Статические сканеры, проверяющие только опасные импорты Node, этого не увидят».
Одновременно обнаружились вредоносные пакеты с иными способами запуска. npm-пакет ascii-fetcher подтягивал зависимость @jaymara/jsononifier, которая декодировала встроенную команду и исполняла её через child_process.exec. Параметр windowsHide скрывал процесс Windows; в изученном образце командой была calc.exe. Сам запуск калькулятора не крадёт данные, но наглядно подтверждает возможность незаметно выполнить произвольную команду через цепочку зависимостей.
Ещё одна группа состояла из десяти расширений VS Code, распространявших BAT-, JavaScript- и HTA-дропперы для Windows. Два из десяти включали npm-зависимость с postinstall-хуком: после установки пакета такой хук автоматически загружал удалённую полезную нагрузку и исполнял её. Отдельно исследователи разобрали DigitalBarberTrim.html-entity-codec. В некоторых версиях расширение перебирало известные форки VS Code, включая Cursor, Windsurf, Codium и Positron, после чего скачивало либо размещало удалённый файл VSIX. Формат VSIX используется для распространения и установки расширений Visual Studio и VS Code. Другие версии DigitalBarberTrim.html-entity-codec представляли собой «почти пустую заглушку», помогавшую пакету не привлекать внимания между вредоносными выпусками.
Расширение Zlmiles.zlmiles-liquid, впоследствии удалённое из VS Marketplace, работало через предполагаемый конструктор вредоносных программ. Оно размещало в системе установщик MSI, полученный с домена, который был опубликован на Replit. Разные приёмы складывались в неудобную для проверки картину: удалённый VSIX, MSI-инсталлятор, скрытая npm-зависимость, postinstall-хук, BAT-, JavaScript- и HTA-дропперы, зашифрованный Python-код, Telegram-загрузка и легитимный API буфера обмена могли встречаться в разных версиях одного на вид безобидного инструмента.
После установки helper-beeps.solidity-pro, web3devtoolsx.solidity-pro, ethdevtools.solidity-language-support, DigitalBarberTrim.html-entity-codec, Zlmiles.zlmiles-liquid или связанных подозрительных пакетов одного удаления недостаточно. Нужно проверить граф зависимостей, удалить неожиданные компоненты, заблокировать известные командно-управляющие домены C2 и настроить оповещения о подозрительном запуске cscript, mshta, cmd, curl и powershell. Эти средства часто применяются дропперами для загрузки, исполнения и сокрытия следующего этапа атаки. Следует также отозвать токены контроля версий и Telegram-ботов, заменить API- и SSH-ключи, завершить браузерные сессии, проверить адреса недавних криптопереводов и перевести активы на кошелёк с новой BIP-39-фразой, если старая могла попасть в буфер обмена или хранилище браузера.[/final]

Изображение носит иллюстративный характер
По данным Yeeth Security, вредоносная схема менялась вместе с версиями. Релизы от 1.0.0 до ветки 2.4.x обращались к конечным точкам Cloudflare Workers, получали оттуда зашифрованную полезную нагрузку на Python и запускали её на компьютере жертвы. Начиная с версии 3.0.0, Solidity Pro превратился в полноценный похититель информации: искал браузерные профили, криптовалютные кошельки, токены доступа к исходному коду, API- и SSH-ключи, а также токены Telegram-ботов. Такой набор позволял атаковать уже не один кошелёк, а рабочую инфраструктуру разработчика.
Вредоносная ветка запускалась с задержкой, когда пользователь успевал проверить расширение в работе и решить, что оно полезно. Короткие автоматические проверки к этому времени обычно уже заканчивались. Yeeth Security описала расчёт разработчиков так: «К тому времени, когда запускается вредоносная ветка, пользователь уже решил, что расширение полезно, а автоматические сканеры, наблюдающие за пакетом лишь несколько минут, успели перейти к следующей проверке». Маскировка тоже была рабочим механизмом, а не косметикой: строки разбивались между таблицами IIFE, собирались во время исполнения, а названия методов менялись от релиза к релизу. IIFE, Immediately Invoked Function Expression, означает JavaScript-выражение функции, которое выполняется сразу после объявления. Как пояснила Yeeth Security, «Обфускация здесь не декоративна: она разделяет строки между таблицами IIFE, заново собирает их во время исполнения и меняет имена методов между выпусками, поэтому сигнатурным средствам обнаружения приходится отслеживать постоянно движущуюся цель».
Эта тактика совпадает с общей схемой кластера WhiteCobra, обнаруженного в сентябре 2025 года. WhiteCobra распространял Lumma Stealer через вредоносные расширения VS Code, спрятанные под видом обычных инструментов разработки. В случае Solidity Pro использовалась та же ставка на доверие программиста к редактору и его экосистеме: установленное расширение получает удобную позицию рядом с исходным кодом, терминалом, буфером обмена, браузерными сессиями и секретами проекта.
В июне 2026 года Yeeth Security уже выявляла поддельное расширение ethdevtools.solidity-language-support. Оно выдавало себя за средство поддержки языка Solidity для разработчиков Ethereum, но содержало похититель буфера обмена с отложенным запуском. Код искал мнемонические фразы BIP-39, закрытые ключи Ethereum и адреса криптовалютных кошельков. Если в буфере обнаруживался известный формат криптоадреса, расширение подменяло его адресом злоумышленника. Пользователь мог проверить первые и последние символы невнимательно или вообще не проверить и отправить средства не тому получателю.
Подмена выполнялась через штатный API vscode.env.clipboard.writeText. Для неё не требовались child_process, сетевое подключение или запись файлов, поэтому сканер, ищущий лишь подозрительные импорты Node.js, мог ничего не заметить. Формулировка Yeeth Security была прямой: «Когда в буфере обмена находится распознанный криптоадрес, расширение заменяет вставляемое значение адресом, контролируемым злоумышленником». Исследователи добавили: «Подмена происходит через vscode.env.clipboard.writeText, штатный вызов API, которому не нужны child_process, доступ к сети и запись файлов. Статические сканеры, проверяющие только опасные импорты Node, этого не увидят».
Одновременно обнаружились вредоносные пакеты с иными способами запуска. npm-пакет ascii-fetcher подтягивал зависимость @jaymara/jsononifier, которая декодировала встроенную команду и исполняла её через child_process.exec. Параметр windowsHide скрывал процесс Windows; в изученном образце командой была calc.exe. Сам запуск калькулятора не крадёт данные, но наглядно подтверждает возможность незаметно выполнить произвольную команду через цепочку зависимостей.
Ещё одна группа состояла из десяти расширений VS Code, распространявших BAT-, JavaScript- и HTA-дропперы для Windows. Два из десяти включали npm-зависимость с postinstall-хуком: после установки пакета такой хук автоматически загружал удалённую полезную нагрузку и исполнял её. Отдельно исследователи разобрали DigitalBarberTrim.html-entity-codec. В некоторых версиях расширение перебирало известные форки VS Code, включая Cursor, Windsurf, Codium и Positron, после чего скачивало либо размещало удалённый файл VSIX. Формат VSIX используется для распространения и установки расширений Visual Studio и VS Code. Другие версии DigitalBarberTrim.html-entity-codec представляли собой «почти пустую заглушку», помогавшую пакету не привлекать внимания между вредоносными выпусками.
Расширение Zlmiles.zlmiles-liquid, впоследствии удалённое из VS Marketplace, работало через предполагаемый конструктор вредоносных программ. Оно размещало в системе установщик MSI, полученный с домена, который был опубликован на Replit. Разные приёмы складывались в неудобную для проверки картину: удалённый VSIX, MSI-инсталлятор, скрытая npm-зависимость, postinstall-хук, BAT-, JavaScript- и HTA-дропперы, зашифрованный Python-код, Telegram-загрузка и легитимный API буфера обмена могли встречаться в разных версиях одного на вид безобидного инструмента.
После установки helper-beeps.solidity-pro, web3devtoolsx.solidity-pro, ethdevtools.solidity-language-support, DigitalBarberTrim.html-entity-codec, Zlmiles.zlmiles-liquid или связанных подозрительных пакетов одного удаления недостаточно. Нужно проверить граф зависимостей, удалить неожиданные компоненты, заблокировать известные командно-управляющие домены C2 и настроить оповещения о подозрительном запуске cscript, mshta, cmd, curl и powershell. Эти средства часто применяются дропперами для загрузки, исполнения и сокрытия следующего этапа атаки. Следует также отозвать токены контроля версий и Telegram-ботов, заменить API- и SSH-ключи, завершить браузерные сессии, проверить адреса недавних криптопереводов и перевести активы на кошелёк с новой BIP-39-фразой, если старая могла попасть в буфер обмена или хранилище браузера.[/final]