Уязвимости в расширении Angular Language Service для VS Code позволяют выполнить код на машине разработчика

Angular

В популярном расширении для Visual Studio Code - Angular Language Service (идентификатор Angular.ng-template) - обнаружены две уязвимости высокой степени критичности. Они позволяют злоумышленнику выполнить произвольный код на рабочей станции разработчика через вредоносные файлы проекта или зависимости. Проблемы затронули все версии расширения до 21.2.4 включительно. Патч уже вышел, обновление настоятельно рекомендуется.

Детали уязвимостей

Уязвимости зарегистрированы под идентификатором GitHub Advisory GHSA-ccq4-xmxr-8hcq. По шкале CVSS v4 они получили высокий балл - атака возможна через сеть, не требует специальных привилегий и отличается низкой сложностью. Классификация включает несколько категорий CWE: CWE-79 (межсайтовый скриптинг), CWE-94 (внедрение кода), CWE-427 (неконтролируемый путь поиска) и CWE-494 (загрузка кода без проверки целостности). Все эти обозначения указывают на то, что разработчики расширения недостаточно проверяли входящие данные и небезопасно обрабатывали конфигурацию.

Первая уязвимость связана с отображением подсказок в JSDoc. JSDoc - это стандарт документирования кода на JavaScript и TypeScript, который использует специальные комментарии. Расширение Angular Language Service обрабатывает эти комментарии и показывает их во всплывающих окнах при наведении курсора на символы. Внутри этих окон может отображаться форматированный текст на языке разметки Markdown. Расширение настроило свой обработчик Markdown в доверенном режиме, который разрешает выполнение команд по ссылкам с особыми протоколами. Проблема в том, что разработчики не очищали содержимое JSDoc перед вставкой в подсказку. Атакующий может поместить во вредоносный файл TypeScript или JavaScript комментарий с встроенной командой. Когда разработчик наводит мышь на символ и кликает по появившейся ссылке, на его компьютере выполняется произвольная команда. Для атаки требуется минимальное действие пользователя - один клик.

Вторая уязвимость гораздо опаснее, потому что не требует никакого взаимодействия с пользователем. Она затрагивает настройку TypeScript SDK (набора средств разработки для работы с TypeScript). Расширение читает путь к SDK из файла конфигурации рабочей области - .vscode/settings.json. Этот файл лежит прямо в репозитории проекта, и злоумышленник может изменить его в своём вредоносном форке. Проблема в том, что расширение не проверяет, доверяет ли пользователь рабочей области, и не запрашивает подтверждения. Оно автоматически передаёт указанный путь фоновому серверу на Node.js, который затем загружает файл tsserverlibrary.js из этой папки. Если атакующий подложит в репозиторий поддельный файл tsserverlibrary.js и пропишет путь к нему в настройках, то при открытии рабочей области расширение молча загрузит и выполнит вредоносный код. Никаких диалоговых окон или предупреждений не появится.

Обе уязвимости обходят встроенную защиту VS Code - механизм доверия рабочей области (Workspace Trust). Этот механизм должен блокировать автоматическое выполнение кода из ненадёжных источников. Однако уязвимости в расширении делают эту защиту бесполезной. Разработчики, которые регулярно клонируют репозитории, устанавливают сторонние пакеты или проводят ревью кода, оказываются под угрозой. Такие действия - привычная часть рабочего процесса, и именно их атакующий может превратить в вектор атаки.

Совокупное воздействие уязвимостей крайне серьёзно. Злоумышленник может полностью скомпрометировать окружение разработчика: получить доступ к исходным кодам, ключам доступа, базам данных, внутренним сервисам. Атака через tsdk-настройку происходит бесшумно в момент открытия проекта. Атака через JSDoc требует одного клика, но тоже незаметна для пользователя. Оба метода позволяют внедрить код на этапе, когда разработчик ещё не подозревает об угрозе.

Разработчикам настоятельно рекомендуется немедленно обновить расширение Angular Language Service до версии 21.2.4 или более новой. Кроме того, полезно выполнить ряд профилактических мер. Во-первых, проверять настройки рабочей области в файле .vscode/settings.json перед открытием незнакомого проекта. Во-вторых, избегать клонирования репозиториев из непроверенных источников. В-третьих, включить строгие политики доверия рабочей области: в VS Code можно настроить автоматический запрос подтверждения для каждого нового проекта. Организациям стоит мониторить активность на рабочих станциях разработчиков, особенно при загрузке внешних расширений и скриптов. Ограничение выполнения непроверенных дополнений снизит риск атак через цепочки поставок, подобных этой.

Эти уязвимости - очередное напоминание о том, что даже проверенные инструменты могут стать точкой входа для атаки. Разработчики, работающие с Angular, должны проявлять бдительность и своевременно обновлять расширения. В современной киберсреде защита начинается с простого действия - установки патча.

Ссылки

Комментарии: 0