NOWOŚĆ! Szkolenie AI w pracy admina

Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!

 

Bogata telemetria – rozszerzenia w Open VSX zbierały dane i wykorzystywały nazwy innych wtyczek

04 września 2026, 08:50 | W biegu | 0 komentarzy

Badacze bezpieczeństwa z Manifold zidentyfikowali 77 złośliwych rozszerzeń do Visual Studio Code w Open VSX. Wykorzystują one nazwy i opisy prawdziwych wtyczek z VS Code Marketplace. Zidentyfikowane rozszerzenia zostały już usunięte z Open VSX.

TLDR:

  • Badacze z Manifold znaleźli 77 złośliwych rozszerzeń w Open VSX, które podszywały się pod prawdziwe projekty z VS Code Marketplace.
  • 58 rozszerzeń zbierało ograniczony zakres informacji, głównie hostname, a czasami nazwę workspace lub wersję edytora. 
  • Pozostałe 19 zbierało m.in. dane o użytkowniku, workspace, repozytorium git oraz środowisku CI, w tym informacje pozwalające ustalić ścieżkę repozytorium.
  • Opisy w Open VSX przedstawiały zbieranie danych jako “Telemetry” i poprawnie opisywały większość zakresu danych. Nie ujawniały jednak, że wartości CI faktycznie opuszczają urządzenie.
  • Infrastruktura kampanii wykorzystywała mechanizm oparty na DNS TXT, dzięki któremu operator mógł wskazać nowy adres infrastruktury zbierającej dane.

58 wtyczek było lżejszym wariantem kampanii. Wysyłały swojemu właścicielowi nazwę hosta użytkownika, a czasami także nazwę folderu workspace lub wersję edytora, wraz z identyfikatorem śledzenia przypisanym do danego pakietu.

Sposób przesłania tych danych był różny – niektóre wykonywały POST do /api/v1/metrics lub /api/v1/events, inne używały parametrów żądania GET, a niektóre miały pełną logikę dla wielu endpointów.

Jednak pozostałe 19 robiło trochę więcej. W kilka sekund po aktywacji wykonywały żądanie, w którym wysyłały nazwę hosta i nazwę użytkownika, wersję edytora, identyfikator urządzenia, system operacyjny, język i strefę czasową, a także nazwę folderu otwartego workspace i jego pełną ścieżkę w systemie plików.

Następnie przechodziły do folderu .git. Z pliku config pobierały adresy URL dla origin i upstream, a także część domenową skonfigurowanego commit email. Z HEAD i plików ref pozyskiwały bieżący branch oraz hash commita. Ze środowiska CI uzyskiwały wartości GITHUB_REPOSITORY, CI_PROJECT_PATH, adres kolekcji Azure DevOps i kilka innych parametrów.

Wtyczki odczytywały wartość konfiguracji edytora dotyczącą rezygnacji z telemetrii, jednak dane były wysyłane niezależnie od niego.

Rys. 1 – funkcja ciIdentity() w extension.js, źródło: manifold.security

Opisy wtyczek zawierały sekcję “Telemetry”, która zapewniała, że wtyczki nie wysyłają nigdzie kodu źródłowego, poświadczeń, tokenów, zmiennych środowiskowych. Te zapewnienia zostały potwierdzone przez badaczy. Nie zgadza się tylko jedno – dane CI opisano jako dotyczące wyłącznie nazw znanych zmiennych (w ramach konfiguracji) CI, ale nigdy ich wartości. To nie jest prawdą, bo także wartości są przesyłane.

W opisie nie wspomniano nic o odczytywaniu (i ignorowaniu) preferencji użytkownika w zakresie telemetrii. Nie było też mowy o wyszukiwaniu zastępczych endpointów, gdy główny nie działa – a to już działanie, które co najmniej wzbudza czujność. Pominięto też fakt, że rozszerzenia w praktyce nie dostarczają żadnej funkcjonalności.

Rys. 2 – sekcja “telemetry” w readme rozszerzenia, źródło: manifold.security

Główna domena, do której wysyłane są dane – mangorbit[.]com – została zarejestrowana 15 lipca 2026 r., czyli na 11 dni przed pojawieniem się pierwszego rozszerzenia. Większość wtyczek używała subdomen pulse.mangorbit[.]com i pulse2.mangorbit[.]com. Jedna używa api.mangorbit[.]com, a jedna losowych subdomen w cb.mangorbit[.]com.

Rys. 3 – endpointy mangorbit[.]com w extension.js, źródło: manifold.security

Część wtyczek nie poddawała się, gdy nie udało się przesłać danych. Ponowienie próby następowało po 15 i 50 minutach, następnie po 3,5 godzinach i później co siedem lub osiem godzin. Kod traktował dowolną odpowiedź HTTP jako sukces – wystarczyło, że żądanie dotarło.

A jeśli wszystkie endpointy zawiodły, wtyczka odczytywała rekordy DNS TXT dla subdomeny _beacon i znajdowała zastępczy adres URL. To mechanizm awaryjny na wypadek zablokowania subdomen zapisanych w kodzie. Pozwalało to atakującemu zaktualizować infrastrukturę przez kanał, którego większość mechanizmów filtrowania ruchu nie kontroluje.

Zarówno Microsoft VS Code Marketplace, jak i Open VSX są znanymi źródłami faktycznych rozszerzeń i wiele projektów publikuje w obu miejscach. To sprawia, że tworzy się potencjalna luka – mimo powtarzających się wtyczek, wciąż mają one odrębne przestrzenie nazw. Oznacza to, że nazwa rozszerzenia jednoznacznie należąca do kogoś w jednym rejestrze może oznaczać coś innego w drugim. Tę zależność być może chcieli wykorzystać twórcy znalezionych przez badaczy wtyczek.

Programistom przypominamy, że każda instalowana wtyczka to po prostu kolejna aplikacja – z technicznego punktu widzenia rozszerzenia, mimo mniejszych od standardowego programu możliwości, wciąż mogą wyrządzić szkody lub gromadzić dane.

Warto ograniczać liczbę wtyczek do niezbędnego minimum. W organizacjach polecamy rozważyć wdrożenie whitelist lub manualnego zatwierdzania rozszerzeń przed instalacją u użytkowników (np. przez wewnętrzny “sklep” z wtyczkami).

IOC

Domeny:

  • mangorbit[.]com
  • pulse.mangorbit[.]com
  • pulse2.mangorbit[.]com
  • api.mangorbit[.]com
  • cb.mangorbit[.]com (wraz z subdomenami)

DNS:

  • Lookup TXT dla _beacon.<domena>

User-Agent:

  • vscode-ext-metrics/1.0

Źródło: manifold.security

~Tymoteusz Jóźwiak

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

Odpowiedz