Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Badacze odkryli lukę RCE w popularnej wtyczce Remote Development do edytora kodu VS Code
Visual Studio Code to popularny, darmowy edytor kodu, stworzony przez firmę Microsoft. Oprogramowanie zawiera wsparcie między innymi w zakresie debugowania kodu, zarządzania wersjami kodu źródłowego za pośrednictwem systemu kontroli wersji Git czy automatycznego uzupełniania kodu IntelliSense. Jedną z głównych zalet VS Code jest możliwość rozbudowywania jego funkcjonalności za pomocą różnorodnej gamy wtyczek.
Niestety, niektóre wtyczki mogą negatywnie wpływać na bezpieczeństwo użytkowników VS Code. Dobrym tego przykładem jest błąd w popularnym (ponad milion pobrań) rozszerzeniu Remote Development, znaleziony przez badacza bezpieczeństwa o pseudonimie „smaury”:
Luka umożliwia zdalne wykonywanie komend na urządzeniu ofiary. Na potrzeby demonstracyjne badacz posłużył się powershellem w celu wyświetlenia nowego okna z napisem “command injection”.
Oto jak prezentuje się proof of concept tej podatności:
vscode://vscode-remote/ssh-remote+-oProxyCommand=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -c msg %username% command_injection” „a@127.0.0.1+/a
Głównym źródłem problemu jest brak sanityzacji odpowiedniej komendy wprowadzanej przez użytkownika oraz przeoczenie pewnej funkcjonalności SSH. Wtyczka do łączenia się ze zdalnym hostem wykorzystuje plik binarny SSH. Aby bliżej przyjrzeć się tej funkcjonalności, badacz posłużył się URI o następującym formacie:
vscode://vscode-remote/ssh-remote+$REMOTE_HOST+$PATH_OF_PROJECT_ON_THE_REMOTE_HOST
Podczas łączenia wykonywane jest polecenie: ssh -T -D $RANDOM_PORT „$REMOTE_HOST”. Ponieważ $REMOTE_HOST nie jest odpowiednio sanityzowany, istnieje możliwość wstrzyknięcia dowolnych argumentów w poleceniu do pliku binarnego SSH. Z kolei opcja “ProxyCommand” w SSH umożliwia wykonanie wybranego polecenia na urządzeniu przed rozpoczęciem połączenia. Badacz wykorzystał więc brak odpowiedniego „oczyszczenia” wartości $REMOTE_HOST oraz funkcjonalność binarki SSH do wykonania dowolnych poleceń na urządzeniu ofiary.
Warto dodać, że atakowanie programistów i badaczy bezpieczeństwa za pomocą luk tudzież „nietypowej funkcjonalności” w edytorach kodu i zintegrowanych środowiskach programistycznych (IDE) nie jest niczym nowym. Jako przykład można przywołać chociażby opisywaną przez nas w styczniu tego roku kampanię hakerów z Korei Północnej, którzy próbowali infekować urządzenia badaczy bezpieczeństwa przy wykorzystaniu odpowiednio spreparowanych projektów .sln do Visual Studio, zawierających „pułapkę” w postaci predefiniowanych zdarzeń kompilacji programu, uruchamiających złośliwą bibliotekę DLL na urządzeniu ofiary:
~ Jakub Bielaszewski
Dobrzy by było podzielić się „remediation”, które również jest umieszczone w poście źródłowym. ;)