Специалисты по кибербезопасности из компании ReversingLabs (RL) обнаружили на официальном маркетплейсе Visual Studio Code (VS Code Marketplace) 19 вредоносных расширений. Вредоносное ПО было скрыто внутри папки с зависимостями, причем основной зловредный файл маскировался под изображение в формате PNG. Кампания, активная с февраля 2025 года, была выявлена 2 декабря. Это событие вновь подчеркивает растущий интерес злоумышленников к атакам на цепочку поставок программного обеспечения (software supply chain) через популярные платформы для разработчиков.
Описание
Аналитики отмечают устойчивый рост количества вредоносного ПО, публикуемого на VS Code Marketplace в 2025 году. Некоторые из этих расширений имитируют популярные пакеты, а другие, заявляя о новой функциональности, тайно выполняют зловредные действия на машинах разработчиков. Более того, под угрозой находятся даже легитимные расширения. Например, в июле 2025 года команда RL обнаружила вредоносный pull request, который заразил легитимное расширение VS Code просто путем добавления вредоносной зависимости.
В этой новой кампании злоумышленники использовали знакомую тактику, но с важным изменением. Они скомпрометировали не сам пакет в репозитории npm, а его локальную копию внутри расширения. Расширения VS Code по структуре похожи на npm-пакеты и обычно содержат папку "node_modules" со всеми необходимыми зависимостями. Эта папка упаковывается вместе с расширением, что обеспечивает его бесперебойную работу. Однако это означает, что автор расширения может модифицировать код любой зависимости перед публикацией.
В данном случае злоумышленники выбрали чрезвычайно популярный npm-пакет "path-is-absolute", который с 2021 года был загружен более 9 миллиардов раз. Они модифицировали его главный файл "index.js", добавив новый класс, который активируется при запуске VS Code. Задача этого класса - декодировать JavaScript-дроппер, содержащийся в файле с названием "lock". Код дроппера был обфусцирован с помощью кодирования base64 и последующего реверса строки.
Ключевым элементом атаки стал файл "banner.png", добавленный в папку модифицированной зависимости. На первый взгляд, это обычное изображение-баннер. Однако превью для файла не генерировалось, а попытка открыть его в просмотрщике вызывала ошибку. Более глубокий анализ показал, что "banner.png" не является изображением. На самом деле, это архив, содержащий два вредоносных исполняемых файла.
Декодированный дроппер отвечает за запуск этих бинарников с помощью системной утилиты "cmstp.exe" (LOLBIN, Living-Off-the-Land Binary). Один из бинарников эмулирует нажатие клавиши для закрытия окна "cmstp.exe", а второй представляет собой сложный троян, написанный на Rust. Точные возможности Rust-трояна на момент публикации отчета все еще изучаются. Большинство обнаруженных расширений использовали модифицированный пакет "path-is-absolute", но четыре из них применяли npm-пакет "@actions/io" для развертывания той же полезной нагрузки (payload). В этих случаях бинарники хранились отдельно в файлах с расширениями ".ts" и ".map".
Данная кампания наглядно демонстрирует, как злоумышленники продолжают развивать свои техники, углубляясь в цепочку поставок и злоупотребляя доверенными компонентами для маскировки. Вооружив популярный npm-пакет и спрятав бинарники внутри якобы безобидного PNG-файла, угроза использовала привычку пользователей слепо доверять знакомым именам и зависимостям. VS Code Marketplace остается высокоценной целью для атак. По данным RL, за первые 10 месяцев 2025 года детектирование вредоносного ПО на платформе VS Code почти учетверилось по сравнению с 2024 годом.
Для снижения рисков подобных атак командам разработки рекомендуется тщательно проверять расширения перед установкой, особенно малоизвестные, с низким числом загрузок или без отзывов. Необходимо проводить аудит не только основного кода расширения, но и всех его зависимостей, поскольку вредоносный код может скрываться именно там. Кроме того, следует использовать специализированные инструменты безопасности для автоматизированного скрининга пакетов. Безопасность заключается не в полном отказе от расширений, а в осознании того, что даже доверенные компоненты могут быть скомпрометированы. Все упомянутые в исследовании расширения были сообщены корпорации Microsoft.