Суть уязвимости
Исследователи из Positive Technologies обнаружили критическую уязвимость в инструменте Microsoft Prompty, предназначенном для работы с промптами для больших языковых моделей. Уязвимость получила идентификатор CVE-2026-73299 и максимальную оценку 10.0 по шкале CVSS, что свидетельствует о высочайшей степени риска.
Проблема связана с недостаточной проверкой входных данных в пакете @prompty/core. Файл с расширением .prompty, который используется для описания и конфигурации промптов, мог содержать произвольный JavaScript-код. При обработке такого файла уязвимой версией библиотеки код выполнялся в контексте Node.js-приложения. Это классический пример уязвимости внедрения шаблонов на стороне сервера (Server-Side Template Injection, SSTI).
Технический анализ и механизм эксплуатации
В основе уязвимости лежит функция обработки переменных внутри .prompty файлов. Эти файлы могут содержать шаблоны, которые подставляют динамические данные в промпт. Злоумышленник, имеющий возможность повлиять на содержимое .prompty файла (например, через загрузку собственного файла или манипуляцию данными, которые попадают в шаблон), мог внедрить в него специально сформированную полезную нагрузку на JavaScript.
При парсинге и обработке такого файла движок шаблонов @prompty/core не применял должной санитизации или песочницы (sandbox) для исполняемого кода. В результате, вместо ожидаемой подстановки значения, выполнялся внедрённый JavaScript. Поскольку код исполнялся на сервере в процессе Node.js, атакующий получал возможность:
- провести атаку типа «отказ в обслуживании» (DoS), завершив процесс;
- прочитать, изменить или удалить любые файлы, к которым есть доступ у пользователя Node.js;
- выполнить произвольные системные команды, что могло привести к полной компрометации сервера;
- украсть переменные окружения, включая токены доступа к API, учётные данные баз данных и другие секреты.
Затронутые версии и рекомендации по устранению
Уязвимость затрагивала все версии пакета @prompty/core до 0.1.13. Разработчики Microsoft оперативно выпустили обновление, в котором проблема была устранена путём введения строгой изоляции исполняемого кода.
Для защиты своих систем разработчикам и администраторам необходимо предпринять следующие шаги:
- Немедленно обновите пакет. Установите последнюю версию
@prompty/core(0.1.13 или новее) с помощью менеджера пакетов:
илиnpm install @prompty/core@latestyarn add @prompty/core@latest - Проверьте зависимости. Убедитесь, что уязвимая версия не используется транзитивно другими пакетами в вашем проекте. Для этого можно воспользоваться инструментами вроде
npm audit. - Аудит безопасности. Проверьте логи ваших приложений на предмет подозрительной активности, которая могла бы свидетельствовать об эксплуатации уязвимости до момента обновления. Обратите особое внимание на неожиданные вызовы внешних URL, обращения к файловой системе и аномальные завершения процессов.
- Внедрите принципы безопасной разработки. Никогда не обрабатывайте файлы или данные из недоверенных источников без строгой валидации и санитизации. По возможности избегайте выполнения кода, сгенерированного на основе пользовательского ввода.