Вредоносные расширения VS Code: фальшивое PNG-изображение скрывало троян

information security

Специалисты по кибербезопасности из компании 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
Комментарии: 0