Реклама
Перетяжка // Коробка 3.0

Positive Technologies нашла в Microsoft Prompty дыру на 10 из 10 по CVSS

Уязвимы @prompty/core до 0.1.4 и до 2.0.0-beta.4; исправлены 0.1.5 и 2.0.0-beta.5.

Обложка: Positive Technologies нашла в Microsoft Prompty дыру на 10 из 10 по CVSS

Positive Technologies 2 сентября сообщила, что её команда AppSec Research нашла критическую уязвимость в Prompty, открытом проекте Microsoft для описания, отладки и оценки промптов к языковым моделям. Специально подготовленный файл .prompty позволял выполнить произвольный JavaScript в процессе Node.js с правами приложения, которое его открыло. Уязвимость получила идентификатор CVE-2026-73299 и максимальную оценку 10,0 по CVSS 3.1.

Для разработчиков ИИ-приложений на TypeScript вывод простой: если в проекте есть пакет @prompty/core версии по 0.1.4 включительно или из ветки 2.0 с 2.0.0-alpha.1 по 2.0.0-beta.4 включительно, его нужно обновить, а файлы промптов из чужих репозиториев, от сообщества или сгенерированные моделью с этого момента считать кодом, а не конфигурацией. Исправления Microsoft выпустила в версиях 0.1.5 и 2.0.0-beta.5, говорится в advisory на GitHub.

Ключевые выводы
  • Уязвимость класса SSTI в TypeScript-runtime Prompty: шаблонизатор Nunjucks не ограничивал доступ шаблона к объектам JavaScript.
  • Затронуты npm-пакет @prompty/core по 0.1.4 включительно и ветка 2.0 с 2.0.0-alpha.1 по 2.0.0-beta.4 включительно; исправлены 0.1.5 и 2.0.0-beta.5.
  • CVSS 3.1: 10,0, вектор AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H; CWE-94 и CWE-1336.
  • Эксплуатация требует, чтобы приложение обработало подготовленный злоумышленником файл .prompty; обычный запрос пользователя к модели код не выполняет.
  • Advisory опубликовано 20 июля 2026 года, исправленные версии вышли в npm в тот же день; о находке Positive Technologies рассказала 2 сентября.

Как файл промпта превращался в код

Prompty хранит промпт в файле с YAML-заголовком и телом-шаблоном, а в TypeScript-runtime тело обрабатывает шаблонизатор Nunjucks. По описанию Microsoft в advisory, рендерер вычислял тело недоверенного шаблона «с неограниченным доступом к членам JavaScript-объектов» (перевод редакции): шаблон мог добраться до свойств constructor и prototype и через них выполнить произвольный код в процессе Node.js. Это классическая инъекция в серверные шаблоны, SSTI, только вместо HTML-шаблона здесь файл промпта.

Оценка 10,0 объясняется вектором: атака по сети, низкая сложность, без прав и без участия пользователя, с выходом за пределы уязвимого компонента и полной потерей конфиденциальности, целостности и доступности. На практике последствия зависят от того, с какими правами запущен процесс: Positive Technologies перечисляет доступ к данным приложения и секретам, изменение файлов и настроек, вмешательство в работу сервиса и полный отказ в обслуживании.

При этом речь не о том, что любой текстовый запрос пользователя к модели выполняет код на сервере, подчёркивают в Positive Technologies. Для эксплуатации приложение должно использовать уязвимый TypeScript-runtime с Nunjucks и обработать файл, который подготовил злоумышленник. Microsoft в advisory называет именно такие сценарии: файлы .prompty, полученные от сообщества, клонированные из чужих репозиториев или сгенерированные языковой моделью.

Что изменилось в исправленных версиях

По данным advisory, исправление вошло в pull request №404. Обновлённый рендерер приводит входные данные шаблона к «только собственным данным», отвергает обращение к constructor и prototype и запрещает вызов функций из шаблона. Обычная подстановка переменных, условия, циклы и вложенные свойства собственных данных продолжают работать, так что существующие промпты переписывать не придётся, если они не вызывали функции из тела шаблона.

В реестре npm версия 2.0.0-beta.5 появилась 20 июля 2026 года в 17:42 UTC, версия 0.1.5 в 18:54 UTC того же дня, а advisory Microsoft опубликовала в 18:55 UTC. На момент публикации тег latest в npm указывает на 0.1.6, тег alpha на 2.0.0-beta.5. В advisory затронутыми названы только npm-пакеты; про Python-пакет prompty и расширение для VS Code там ничего не сказано.

Что делать

Проверить, есть ли пакет в проекте и какой версии, можно командой npm ls @prompty/core. Если версия 0.1.4 или ниже, обновляйтесь до 0.1.5 или новее; если вы на ветке 2.0 (с 2.0.0-alpha.1 по 2.0.0-beta.4), до 2.0.0-beta.5 или новее. Microsoft в advisory просит обновиться до 2.0.0-beta.5 или выше.

Второй шаг не про версии. Старший специалист AppSec Research Positive Technologies Александр Халиков формулирует его так: «Файлы с промптами уже нельзя воспринимать как безобидные текстовые конфигурации. В современных ИИ-приложениях они могут содержать исполняемую логику и фактически становятся ещё одним элементом цепочки поставок программного обеспечения». Отсюда те же меры, что для кода: доверенные источники, контроль изменений и происхождения, запрет на обработку непроверенных шаблонов и запуск ИИ-инфраструктуры с минимально необходимыми правами. Если ваш агент сам генерирует или скачивает промпты и тут же их рендерит, это ровно тот сценарий, который Microsoft называет опасным.

Кто и как нашёл

Positive Technologies связывает находку с новой разработкой на основе ИИ, которая автоматизирует поиск уязвимостей и проверку возможности их эксплуатации; по словам компании, инженеру потребовалось две минуты на триаж результатов сканирования. Это заявление компании, независимо проверить его нельзя. В advisory на GitHub в графе «reporter» указан пользователь lexdotdev; между выпуском исправления в июле и публичным рассказом об исследовании в сентябре прошло полтора месяца.

Репозиторий microsoft/prompty на момент публикации собрал 1 255 звёзд на GitHub; Positive Technologies оценивает аудиторию экосистемы Prompty в «десятки тысяч разработчиков» по открытым данным npm, PyPI и Visual Studio Marketplace, и это тоже оценка компании. Нынешняя дыра в проекте не первая: в июне в том же репозитории уже выходили advisory о чтении файлов и выполнении JavaScript через frontmatter. Следующее, за чем стоит следить, это выход стабильной версии 2.0: ветка на GitHub пока помечена как alpha.

Источники: Positive Technologies: новое ИИ-решение помогло найти критическую уязвимость в проекте Microsoft, GitHub Advisory GHSA-w28w-gp39-m4p6, Репозиторий microsoft/prompty, Пакет @prompty/core в npm

Изображение на обложке: Логотип: Microsoft

Рекомендуем