Група от 77 разширения в каталога Open VSX е била открита да имитира легитимни инструменти за разработчици, докато предава информация за системите и средите за разработка, на които са инсталирани.
Разширенията тип „двойник“ (evil twin) са качени в хранилището между 26 юли и 1 август 2026 г., според Manifold Security. Пакетите са премахнати от Open VSX към 3 август 2026 г.
„В повечето пакети се изпраща малко повече от името на хоста на машината,“ споделят изследователите по сигурността Акс Шарма и Коди Наш. „В деветнадесет от тях се изпраща подробно описание на машината, отвореното хранилище в редактора и CI системата, в която работи редакторът.“
От идентифицираните разширения, 58 са описани като олекотени инструменти, предназначени да извличат името на хоста и, в някои случаи, името на папката на работното пространство или версията на редактора.
Останалите са разузнавателен злонамерен код, който предава свързана с разработчика информация: локално име на хоста и потребителско име в операционната система, името на редактора, версията, типа на хоста и идентификатора на машината, платформата и архитектурата, локала и часовата зона, както и името на папката и пълния път във файловата система на отвореното работно пространство.
И двата вида разширения споделят един и същ домейн за извличане на данни, както и сходства в кода и поведението. Имената на 19-те разширения са изброени по-долу:
- artsy.artsy-studio-extension-pack
- configcat.configcat-feature-flags
- mengsiCode.vscode-django-boilerplate
- vs-publisher-988541.apexsql-power-tools
- jcamp.dotnet-test-provider-view
- superposition.supertoml-analyzer
Забележителното в кампанията е, че тя използва повторно имената, пространствата от имена и описанията на реални разширения в Open VSX, но те са публикувани чрез несвързани акаунти и с нисък номер на версията (например 0.0.1). Основната промяна включва подмяна на съдържанието на пакетирания файл „extension.js“ с възможности за прихващане и предаване на данни, докато събирането се представя като „анонимни показатели за използване“.
Нито едно от разширенията не предлага рекламираната функционалност, посочена в описанието им. Вместо това те показват елемент в лентата на състоянието заедно със съобщение, което гласи, че са активни, преди да задействат стъпката за извличане на данни. Във всички 77 разширения данните се изпращат до „mangorbit[.]com“, който е регистриран на 15 юли 2026 г., 11 дни преди публикуването на първите пакети.
Разширенията, които са част от втората група, също така извършват следните стъпки:
- Инспектират файлове в директорията .git на работното пространство, за да получат отдалечени Git хостове и организации, домейна на конфигурирания имейл на разработчика, текущия клон и SHA хеша на HEAD коммита.
- Изброяват до 60 инсталирани идентификатора на разширения и извличат името на хоста на прокси сървъра от средата.
- Извличат имената на всички налични CI маркери и отделно стойностите на GITHUB_REPOSITORY, CI_PROJECT_PATH, URI на колекцията на Azure DevOps, идентификатора на организацията в Buildkite, потребителското име за проекта в CircleCI, името на Codespace и URL адреса на контекста на работното пространство на Gitpod от средите за непрекъсната интеграция (CI).
- Прочитат собствената настройка на редактора за отказ от телеметрия, проверяват дали е активирана и изпращат състоянието.
Допълнителният анализ показва, че злонамереният код има резервни планове за изпращане на заявка към DNS TXT запис, за да извлече резервен URL адрес за извличане на данни, в случай че основният домейн бъде блокиран или спрян. Вариантът за разузнаване също така включва механизъм за повторен опит, който задейства събирането по-късно, което предполага, че целта надхвърля прост еднократен експеримент.
„При разузнавателния вариант опитите се извършват приблизително на петнадесета минута, петдесета минута и три часа и половина, след което на всеки седем или осем часа, като се възобновяват при всяко рестартиране на редактора и се прекратяват едва след седем дни,“ обясняват изследователите. „Машина, която е офлайн, зад защитна стена или зад прокси, което отхвърля първата заявка, бива запитвана отново в продължение на една седмица.“
„Разузнавателният вариант проверява дали собствените devcontainer.json или .vscode/extensions.json на отвореното работно пространство реферират идентификатора на разширението и съобщава отговора като единичен флаг. Казано по-просто, той разграничава инсталации, предизвикани от конфигурацията на хранилището, от инсталации, избрани от човек. Това е полето, което бихте искали, ако въпросът, който задавате, е как бивам привлечен и от какво.“
Разкритието идва в момент, когато 450 уникални npm пакета, обхващащи 2244 артефакта, са компрометирани като част от нова атака срещу веригата за доставки на софтуер с цел доставяне на инструмент за кражба на информация и използване на откраднатия npm токен за изтласкване на троянски версии, съдържащи същия зловреден софтуер. Кампанията за компрометиране е с кодово име ChainDrop.
„Злонамерените версии съдържат вариант на Mini Shai-Hulud – саморазпространяващ се червей за кражба на идентификационни данни, доставян чрез голям, силно обфускиран JavaScript код, базиран на Bun,“ съобщиха от Microsoft. „Зловредният софтуер обикновено се изпълнява автоматично чрез кука на жизнения цикъл преди инсталиране (preinstall) на npm, преди да завърши инсталирането на пакета.“
„Зловредният софтуер може също така да използва откраднати идентификационни данни от GitHub, за да инжектира конфигурационни файлове на Claude и Visual Studio Code в хранилища, установявайки персистентност...“