Вредоносное расширение для TRAE IDE маскируется под поддержку языка Solidity и использует контракт Ethereum для динамического управления C2

information security

Специалисты по блокчейн-безопасности из SlowMist совместно с исследователем под псевдонимом Will42W выявили атаку на цепочку поставок через маркетплейс расширений TRAE IDE. Вредоносное расширение juannegro.solidity имитировало легитимный плагин для поддержки языка Solidity от разработчика Juan Blanco. Отличие в написании имени издателя составило всего несколько символов (juannegro вместо juanblanco), что позволяло пользователю легко не заметить подмену. Расширение было опубликовано на платформе Open VSX 1 мая 2026 года, однако в течение нескольких часов его обнаружили и удалили из этого репозитория. Проблема заключается в том, что TRAE IDE синхронизирует только публикации новых расширений, но не отслеживает их последующее удаление или блокировку. По состоянию на 18 июля 2026 года через API маркетплейса TRAE всё ещё можно было загрузить версию 0.0.189 данного расширения в формате VSIX.

Описание

Обратный анализ показал, что файл VSIX представляет собой кроссплатформенный загрузчик вредоносного кода. Он работает на Windows, macOS и Linux. Активация происходит сразу после запуска редактора кода без необходимости открывать какие-либо файлы Solidity. Расширение объявляет в файле package.json два события активации: onStartupFinished и onLanguage:solidity. Первое из них срабатывает автоматически по завершении загрузки редактора, что делает использование плагина неизбежным для любого установившего его пользователя.

Внутренняя логика расширения использует обфускацию через хеширование. В коде extension.js не применяется прямой вызов child_process.exec. Вместо этого вычисляются SHA-256 хеши названий встроенных модулей Node.js, после чего по двум фиксированным значениям восстанавливаются строки child_process и exec. Таким образом переменная hash указывает на функцию child_process.exec. Затем выполняется сравнение этой функции с фиксированной строкой - оно всегда возвращает истину, поскольку объект функции не может быть равен строке. В результате проверка обходится, и вызывается функция attempt_update, которая передаёт exec для выполнения системных команд.

Как показал анализ специалистов SlowMist, внутри attempt_update вредоносное расширение определяет операционную систему через os.platform() и записывает на диск файлы закрепления, а также настраивает автоматический запуск. На macOS полезная нагрузка помещается в каталог ~/.solidity/, снимаются атрибуты карантина, создаётся LaunchAgent для старта при входе пользователя. На Linux используется каталог ~/.solidity/ и systemd-сервис для перезапуска после аварийного завершения. На Windows файлы сохраняются в C:\Users\Public\solidity\, скрываются, добавляется запись в раздел реестра HKCU Run и предпринимается попытка добавить исключение для Защитника Windows. После этого на Windows запускается solidity-compiler.js, а на macOS и Linux - нативный исполняемый файл из каталога расширения.

Все скомпрометированные системы связываются с одним и тем же смарт-контрактом в основной сети Ethereum. Адрес контракта: 0xf8a900db50b3331be6b768ba460bb59f3e40c344. В коде контракта зафиксированы две ключевые конфигурации: param1 хранит адрес удалённой оболочки для macOS и Linux, param2 содержит адрес для загрузки второй стадии полезной нагрузки для Windows. Атакующий может изменить эти параметры через два селектора функций, которые защищены проверкой владельца контракта. Владельцем является кошелёк 0xFd3fc58bcbd8ccc77b6000201438eDfc636E7cA7. На момент проверки param1 указывал на 107.189.27[.]46:4912, param2 - на hxxp://107.189.27[.]46:3000/app.js.

Изучение истории транзакций контракта через блокчейн-обозреватель показало, что контракт был развёрнут 14 марта 2026 года. Уже через двадцать минут владелец начал тестировать механизм управления, устанавливая param1 на локальный адрес localhost:4912. После публикации расширения 1 мая владелец дважды менял параметры: 3 мая он установил param1 на внешний IP, 16 мая - param2 на новый адрес второй стадии. Все транзакции были совершены после публикации VSIX-файла, что доказывает способность злоумышленника менять конфигурацию без перевыпуска расширения.

Особенность данной атаки заключается в том, что механизмы закрепления остаются в системе даже после удаления расширения из маркетплейса или его деинсталляции пользователем. Простое удаление плагина из списка расширений IDE не удаляет вредоносные файлы из каталогов ~/.solidity/, ~/Library/LaunchAgents, ~/.config/systemd/user или C:\Users\Public\solidity\. Также не отменяются записи реестра на Windows. Вдобавок злоумышленник мог уже загрузить вторую стадию полезной нагрузки, и её исполняемые файлы также сохраняются независимо. Командно-контрольный сервер остаётся доступным через блокчейн-контракт, который продолжает работать, пока существует сеть Ethereum.

Для владельцев систем, которые могли установить juannegro.solidity, одного удаления недостаточно. Требуется полная проверка: изоляция устройства, проверка указанных путей и записей реестра, а также сетевых соединений к IP-адресам 107.189.27[.]46:4912, 107.189.27[.]46:3000, 91.108.240[.]156:4912, 91.108.240[.]156:3000, 107.189.16[.]215:4912. Если на устройстве хранились ключи подписи кода, приватные ключи SSH, учётные данные облачных сервисов, сид-фразы криптовалютных кошельков или токены доступа к производственным средам, необходимо действовать по процедуре компрометации: переустановка операционной системы с доверенного носителя, отзыв всех сессий и токенов с другого безопасного устройства, замена всех скомпрометированных учётных данных.

Данный инцидент демонстрирует критический недостаток в механизмах синхронизации платформ расширений. TRAE IDE не импортирует статус удаления или блокировки из Open VSX, в результате чего вредоносное расширение продолжает распространяться, хотя исходный репозиторий уже провёл очистку. Платформам следует не только синхронизировать информацию о публикациях, но и своевременно передавать данные об удалении и рисках, а также уведомлять установивших пользователей. В противном случае уже внедрённые бэкдоры остаются активными независимо от маркетплейса.

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

IPv4 Port Combination

  • 107.189.16.215:4912
  • 107.189.27.46:3000
  • 107.189.27.46:4912
  • 91.108.240.156:4912

URL

  • http://107.189.27.46:3000/app.js
  • http://91.108.240.156:3000/app.js

Contract

  • 0xf8a900db50b3331be6b768ba460bb59f3e40c344

Owner

  • 0xFd3fc58bcbd8ccc77b6000201438eDfc636E7cA7

SHA256

  • 80d2672e2599732d3c0ae2a4cd0d1e3fe4d555a60273ce33feb99db3f34d250f
  • 9b73e7cd4e1425e770392549d8df46c706139ef476f4f7b9ac405165dc8d9696
  • b601776817363b96295119f7221338a122d5247a35a77a64b04f286e1bbcc565
  • fae61f31f00988fdc5cc9e7272b51e08af2e245d81003237875415930fd27358
  • ff943371750ecd2ce6caa50c12d673e82743bdbc9569552eebfa98ccb2f4ac69

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