Невидимый комментарий в pull request превращает ИИ-агента ревьюера в шпиона
Компания Manifold Security описала уязвимость класса «запутанного посредника» (confused deputy) в официальном MCP-сервере Microsoft для Azure DevOps. Сервер позволяет ИИ-агентам читать и обслуживать pull request'ы, пайплайны, вики и рабочие элементы от имени пользователя — с его собственными правами. В этом и заключается корень проблемы: текст, написанный посторонними, может стать инструкцией, которую агент выполнит.
Как работает атака
Описания pull request'ов в Azure DevOps поддерживают Markdown, а значит и HTML-комментарии. В веб-интерфейсе конструкция <!-- ... --> не отображается вовсе — ревьюер видит обычную правку. Но REST API возвращает такой текст дословно, и сервер передаёт его агенту как есть. Возникает расхождение между тем, что видит человек, и тем, что получает модель.
Когда ревьюер просит агента проверить pull request, скрытый текст может переписать цель агента. Тот действует с учётными данными ревьюера — а значит способен добраться до проектов, куда у самого атакующего доступа нет. Manifold подчёркивает, что эскалация здесь — норма: ревьюеры обычно старше по правам, чем автор запроса. Нападающий не получает ничего напрямую, он лишь одалживает чужой доступ через текст, которого жертва не видит.
Защита, которую забыли применить
Особенность в том, что Microsoft уже реализовала нужную защиту. Изучив исходный код, Manifold обнаружила приём «spotlighting» — обёртывание недоверенного контента в разделители, чтобы модель отличала данные от инструкций. Он был добавлен в PR #1062 и применяется к вики-страницам и логам сборки через общий помощник createExternalContentResponse. Однако инструмент repo_get_pull_request_by_id, возвращающий описание запроса, этот помощник не вызывает — и отдаёт текст в сыром виде. The Hacker News подтвердило, что по состоянию на 21 июля брешь в актуальном коде не закрыта.
В демонстрации на локальной сборке v2.7.0 один скрытый комментарий запустил цепочку: агент триггерил пайплайн в другом проекте, читал конфиденциальную вики-страницу, недоступную атакующему, и публиковал её содержимое обратно в комментарий к pull request. Каждый вызов был разрешён агенту — проблема, как пишут исследователи, «в последовательности и намерении, продиктованных текстом, которого человек не видел». Воспроизвести атаку удалось и с Copilot CLI, и с Claude Code.
Условия и рекомендации
Для атаки нужны: право записи в проект, рабочий процесс, скармливающий текст агенту, ревьюер с более широким доступом и агент в режиме авто-одобрения без запроса на каждый инструмент. Именно широкий токен вкупе с таким режимом концентрируют риск.
Представитель Microsoft поблагодарил Manifold за раскрытие, назвал случай «известным классом ИI-рисков» и посоветовал ограничивать доступ к проектам и «проверять предлагаемые изменения перед тем, как поручать их ИИ». Загвоздка в том, что вредоносная нагрузка невидима в том самом интерфейсе, который просматривает человек. CVE пока не присвоен, исправленной версии нет.
Специалисты советуют выдавать агенту токены с минимальными правами, ограничивать его проектом под ревью и убирать из набора инструментов всё лишнее — запуск пайплайнов, чтение вики, публикацию комментариев. Ведь защита работает лишь там, где кто-то не забыл её добавить, и надёжна ровно настолько, насколько прикрыт её самый уязвимый путь.
Источник: The Hacker News
Комментарии
Войдите, чтобы комментировать.