Специалисты по кибербезопасности из компании 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.
Индикаторы компрометации
SHA1
- 0aad0649f74872d37fbce2369f4de3a5212f47de
- 21a53bcb9d97ae04ed9247063485f441bd072f15
- 35080681cf76a5715ea4c04ec1aa126af53a3238
- 3be8024c4fa34f7d7d100fd783df1a95e0c9dbbe
- 40fb5d1cedcd5342e0d9b899ac18388886bcb4f0
- 451dc570125d4e0db47217d5e177d0fa94c8bbb3
- 578b6b117d433b71e3cb69c2062ab61f29171ae6
- 6a1fc337ec7fdfaa89604d686cf5afef5057dc90
- 6a2e4e2668dfcae345dad3694b2631fffae7d132
- 71c241a7110abb70bff59d22e0238bc5553d495a
- 772d1159c93b097b449b17a20e4b60bfd038adc8
- 77c76d6d067821bc3a34b734a719df44a39c12df
- 7cb116b08bda294d962b28bf47ece4b40d9ed2a8
- 9252d278a3e693d1a41b99c2aeca05347a3ba107
- 9985d8e1c820cf4bdf25f7b0023d2b879c8af722
- c6e5b9c41e5dd7cadc7247bcfbaeb643ade61e46
- d85271c013499ab45b3e6fa1820f79d268ea3a7e
- dc40c33ffbca097917f17f7482eef295856d8076
- edcbdb65d8653c11be197bd188241813bf431bc7
Package name
- malkolm.theme-artschool-remake
- malkolm.theme-ascetic-remake
- malkolm.theme-aurora-remake
- malkolm.theme-azure-remake
- malkolm.theme-bashling-remake
- pandaexpress.theme-anarchisteighties-plugin
- pandaexpress.theme-anarchist-plugin
- pandaexpress.theme-ant-plugin
- pandaexpress.theme-array-plugin
- pandaexpress.theme-arstotzka-plugin
- prada555.theme-abyss-ported
- prada555.theme-acai-ported
- prada555.theme-active4d-ported
- prada555.theme-afterglow-ported
- priskinski.Theme-Afterglow-remake
- priskinski.Theme-AgolaDark-remake
- priskinski.Theme-AllHallowsEve-remake
- priskinski.Theme-Amber-remake
- priskinski.Theme-Amy-remake