Złośliwe oprogramowanie zatwierdzone dlatego, że nie było go widać
GlassWorm ukrywa ładunek w niewidocznych znakach Unicode, które przechodzą przez ludzką weryfikację kodu, a następnie odczytuje dane logowania leżące w Pana/Pani środowisku roboczym. Niewidoczny robak nie łamie szyfrowania. Potrzebuje pliku.
Recenzent przeczytał zgłoszenie typu pull request. Każdy wiersz renderował się poprawnie: podniesienie wersji, niewielki refactoring, drobna zmiana w dokumentacji. Nic nie wyglądało na błędne, ponieważ część błędna nigdy nie została narysowana na ekranie. Zapisano ją znakami Unicode, które nie posiadają glifu. Niewidoczne dla oczu, niewidoczne w widoku różnic, niewidoczne dla ludzkiego podpisu, na którym bezpieczeństwo łańcucha dostaw wciąż się opiera.
To jest GlassWorm. Od października badacze z Koi Security śledzą pierwszego samorozprzestrzeniającego się robaka, który rozprzestrzenia się przez rozszerzenia VS Code, i nie przestał on działać [1]. Socket od końca stycznia oznaczył ponad siedemdziesiąt nowych złośliwych rozszerzeń w repozytorium Open VSX [2]. Program ładujący ukrywa się w niewidocznych znakach Unicode, więc kod przechodzi przez weryfikację, wyglądając na zwykłe porządki techniczne.
To, co robi po instalacji, jest częścią zwyczajną — i o to właśnie chodzi. Odczytuje to, co leży w pobliżu. Tokeny npm. Dane logowania do GitHub. Konfigurację Git. Zmienne środowiskowe i sekrety CI pozostawione otwarcie w Pana/Pani środowisku roboczym. Następnie wykorzystuje te skradzione dane do publikowania kolejnych zatrutych pakietów pod Pana/Pani nazwą — i w ten sposób robak staje się robakiem. Komunikacja z serwerem dowodzenia odbywa się przez transakcje na Solanie, więc nie ma serwera do przejęcia [3].
Oto zmiana perspektywy. Nikt nie zhakował @code. Open VSX nie zostało naruszone w klasycznym sensie. Model rozszerzeń zrobił dokładnie to, do czego został zaprojektowany: instaluje Pan/Pani narzędzie pomocnicze, a ono działa z Pana/Pani uprawnieniami, wewnątrz otwartego projektu, obok sekretów. Model ten zbudowano dla świata, w którym autor rozszerzenia był jedyną stroną, której trzeba było zaufać. GlassWorm zamienia konto zaufanego autora w ciężarówkę dostawczą i ukrywa ładunek w znakach, których Pan/Pani nie widzi. Narzędzie nie zawiodło. Model zagrożeń przesunął się pod wszystkimi naraz.
Co prowadzi do niewygodnego pytania dotyczącego Pana/Pani własnego komputera. Kiedy rozszerzenie, któremu Pan/Pani zaufał(a), otwiera projekt, co jest tam do zabrania?
Dla większości programistów odpowiedź brzmi: wszystko. Długowieczny token npm w pliku rozpoczynającym się od kropki. Token dostępu osobistego, który pomocny przewodnik konfiguracji kazał wkleić raz i zapomnieć. Sekrety w pliku env, który może odczytać każdy proces na maszynie. Te dane logowania spoczywają w stanie spoczynku, dokładnie w miejscu, w którym działa kod, czekając na wszystko, co ma dostęp lokalny. Niewidoczny robak w edytorze nie musi łamać szyfrowania. Potrzebuje pliku.
Clavitor wychodzi z przeciwnego założenia. Dane logowania są pośredniczone w momencie, w którym są potrzebne, ograniczone zakresem do jednej rzeczy, do której służą, i wygasają. Nigdy nie są zapisywane w Pana/Pani środowisku deweloperskim, aby zostać później odkryte. Dlatego gdy wrogi kod przeszukuje środowisko robocze w poszukiwaniu kluczy w spoczynku, nie ma tam stałego tokena npm, nie ma wiecznego tokenu PAT do GitHub, niczego, co przetrwa sekundę, w której zostało użyte. Robak otwiera szufladę, a szuflada jest pusta.
Uczciwe zastrzeżenie: dane logowania w aktywnym użyciu są nadal żywe, dopóki są używane. Jeśli Pana/Pani sesja działa, a wrogi kod dzieli tę sesję, może on korzystać z tego, co jest właśnie aktywne, w wąskim oknie czasowym i ograniczonym zakresie tych danych. Efemeryczne wydawanie w ograniczonym zakresie zmniejsza promień rażenia i zegar. Nie czyni bezpiecznym komputera, który Pan/Pani przekazał(a) atakującemu. Nic tego nie czyni. Ale między atakującym, który przechwytuje jedno ograniczone zakresem dane logowania w trakcie użycia, a atakującym, który kopiuje plik z trwałymi kluczami i ma Pana/Pani w swoich rękach przez rok, jest duża przepaść.
Spisaliśmy krótką listę rzeczy, których system danych logowania nigdy nie powinien robić. Blisko szczytu tej listy: nie zostawiać sekretów tam, gdzie działa kod. Przeczyta je Pan/Pani tutaj
Clavitor (@clavitorai) to skarbiec danych logowania zbudowany dla agentów AI — i przeciwko nim. clavitor.ai
Źródła
[1] Koi Security — "GlassWorm: The First Self-Propagating Worm Using Invisible Code Hits the Open VSX Marketplace" (firma badawcza; brak zweryfikowanego konta na X)
[2] Socket, za pośrednictwem @TheHackersNews — "GlassWorm Supply-Chain Attack Abuses 72 Open VSX Extensions to Target Developers" (@SocketSecurity)
[3] @SecurityWeek — "Supply Chain Attack Targets VS Code Extensions With ‘GlassWorm’ Malware"