Сериозен проблем със сигурността във Visual Studio Code би могъл да позволи на атакуващите да получат постоянен достъп до работната станция на разработчик само с едно кликване в папката на злонамерен проект.

Атаката злоупотребява с кликаеми връзки в редактора на изходен код на VS Code, за да заобиколи защитата, очаквана от Workspace Trust. Функцията Workspace Trust е проектирана да защитава потребителите, когато отварят код от неизвестен източник. Когато дадена папка не е доверена, VS Code преминава в ограничен режим (Restricted Mode).

Това трябва да предотврати рискови действия, като например стартиране на задачи, дебъгери или терминални команди. Основната идея е проста: самото отваряне на неизвестно хранилище не трябва да изпълнява код, контролиран от атакуващия.

Въпреки това изследователи от Remedio откриха път, който може да позволи на злонамерен проект да задейства вътрешни команди във VS Code чрез специално конструирана връзка от тип command:.

VS Code автоматично открива URL адреси във файлове като README, коментари и Markdown документи. Потребителите често могат да отварят тези връзки с Ctrl+кликване. Обикновено разработчиците очакват такива връзки да отварят уебсайтове или страници с документация.

Но VS Code поддържа и специални command: URL адреси. Вместо да отварят браузър, тези връзки могат да извикват вътрешна команда на редактора и да ѝ предават аргументи. VS Code разполага със стотици вградени команди, а инсталираните разширения могат да добавят още команди.

Злонамерен проект във VS Code позволява постоянен достъп с едно кликване

Една команда, будeща безпокойство, е workbench.extensions.installExtension. Според справочника с команди на VS Code, командата може да инсталира разширение чрез идентификатор на разширението или URI на VSIX пакет с разширение.

Запитването на Workspace Trust, единственият въпрос, на който се базира цялата функция (източник: Remedio)
Запитването на Workspace Trust, единственият въпрос, на който се базира цялата функция (източник: Remedio)

Атакуващ би могъл да скрие командна връзка зад безвреден текст като „Инсталиране на зависимости на проекта“ или „Настройка на този проект“. Ако жертвата натисне Ctrl+клик върху връзката в изходния файл, на редактора може да се укаже да инсталира зловреден VSIX пакет, поставен в папката на проекта.

Разширението за VS Code е нещо повече от конфигурационен файл. То може да изпълнява JavaScript или TypeScript код с правата на влезлия в системата потребител. Това означава, че злонамерено разширение може да получи достъп до локални файлове, изходен код, SSH ключове, идентификационни данни за облачни услуги, токени за достъп през браузър или инструменти за разработка.

Опасността се простира и извън първоначалното кликване. Веднъж инсталирано, разширението може да остане в системата и да се активира при следващи сесии на VS Code.

Жертвата може да затвори злонамерения проект, да рестартира компютъра и по-късно да отвори доверено хранилище. Междувременно разширението на киберпрестъпника все още се зарежда на заден план.

Резултат: calc.exe е стартиран и е записан маркерен файл, докато работната среда все още е ограничена (източник: Remedio)
Резултат: calc.exe е стартиран и е записан маркерен файл, докато работната среда все още е ограничена (източник: Remedio)

Това прави проблема изключително сериозен за работните станции на разработчиците. Разработчиците често притежават достъп до частни хранилища, CI/CD системи, инфраструктура за подписване, облачни акаунти и производствени тайни. Компрометирането на едно устройство на разработчик може да стане отправна точка за по-голям инцидент във веригата за доставки на софтуер.

Документацията на Microsoft за Workspace Trust посочва, че от потребителите може да се изисква да се доверят на работната среда или да инсталират разширението при инсталиране на разширения в ограничен режим. Разширенията, които не поддържат Workspace Trust, могат да бъдат инсталирани с ограничена функционалност или да бъдат деактивирани.

Според Remedio Research притеснението е, дадено локално VSIX разширение може да декларира поддръжка за недоверени работни среди. Ако VS Code приеме тази декларация, без да покаже съществено предупреждение за сигурност, атакуващият може да инсталира разширението, докато работната среда остава недоверена.

По-широкият извод е, че границата на сигурност трябва да се прилага последователно. Блокирането на опасни командни връзки в генерирания преглед на Markdown не е достатъчно, ако същата връзка все още може да се изпълни през суровия редактор на изходен код.

Разширението на атакуващия вече се намира в списъка с инсталирани разширения, изглеждайки обикновено (източник: Remedio)
Разширението на атакуващия вече се намира в списъка с инсталирани разширения, изглеждайки обикновено (източник: Remedio)

Разработчиците трябва да избягват да кликат върху връзки в непознати хранилища, особено връзки, които твърдят, че инсталират зависимости, конфигурират среди или стартират действия за настройка на проекта. Потребителите трябва също така да държат Workspace Trust включен и редовно да преглеждат инсталираните разширения.

Практическа мярка за ограничаване на риска е изключването на кликаемите връзки в редактора чрез следната потребителска настройка: json "editor.links": false.

Тази настройка предотвратява автоматичното откриване и отваряне на връзки от VS Code директно от редактора на изходен код, премахвайки пътя с кликване, използван от съобщената техника. Настройката е документирана в конфигурацията по подразбиране на VS Code като контролираща дали редакторът открива връзки и ги прави кликаеми.

Организациите трябва също така да ограничат инсталирането на разширения чрез централизирани политики и да разрешават само одобрени издатели или разширения. Докато Microsoft не реши напълно проблема с обработката на командни връзки във всички среди на редактора, разработчиците трябва да третират връзките в недоверен код като потенциално враждебни.