Prompt Injection, Real RCE: граница между agent и tool хрупка

Prompt injection в agent frameworks может превратиться в RCE, если model output попадает в privileged tool paths.

2026-05-12 GIGATAP Team #security
#ai security#agent frameworks#prompt injection

Prompts as RCE: почему agent frameworks увеличивают радиус поражения

AI agents изменили security boundary.

Модель, которая только генерирует text, всё ещё можно злоупотребить, но failure mode обычно остаётся на уровне content layer. Как только та же модель подключена к tools (plugins/functions), которые могут читать files, искать по data stores или выполнять code, prompt injection перестаёт быть «просто» проблемой prompt. Она становится путём к тому, до чего может дотянуться tool layer.

Команда безопасности Microsoft опубликовала case study об этом сдвиге на примере своего open-source agent framework Semantic Kernel. В посте описаны две vulnerabilities (уже исправлены), где attacker, способный влиять на input агента, потенциально мог направить tool invocation так, что это переходило в host-level code execution.

Что, по словам Microsoft, уязвимо (и что уже исправлено)#

Microsoft сообщает о двух critical issues, найденных во время внутреннего исследования Semantic Kernel:

  • CVE-2026-25592: описана как issue arbitrary file write через SessionsPythonPlugin.
  • CVE-2026-26030: путь к RCE, связанный с Search Plugin при использовании In-Memory Vector Store с default configuration.

В посте это подаётся как failure trust между framework и tooling, а не как «model went rogue». Модель делает то, для чего она предназначена: парсит language, выбирает tool и передаёт parameters. Уязвимость — в том, как framework и plugins принимают эти parameters и превращают их в executable behavior.

Microsoft утверждает, что flaws исправлены, а цель блога — в том числе показать, как думать о agentic risk: повсеместный orchestration layer (Semantic Kernel, LangChain, CrewAI и т. п.) может стать systemic dependency. Если mapping «model output → tool schema → code execution» небезопасен в одном распространённом месте, множество downstream apps унаследуют проблему.

CVE-2026-26030: как search feature превращается в code path#

Самая показательная часть разбора — «representative» exploit chain для CVE-2026-26030.

Microsoft пишет, что для exploitation нужны два условия:

  1. У attacker есть prompt injection vector (какой-то способ влиять на input агента).
  2. Целевой агент использует Search Plugin поверх In-Memory Vector Store в default configuration.

Когда эти условия выполнены, Microsoft демонстрирует, что одного prompt может хватить, чтобы добиться code execution на host, где запущен agent. Никакого browser exploit. Никакого malicious attachment. Никакой memory corruption. Только agent, который вызывает tool.

Core bug: небезопасная string interpolation в executable code#

В примере Microsoft Search Plugin использует default filter, реализованный как Python lambda expression, который выполняется через eval.

Строка фильтра берётся из input, контролируемого model, и не sanitizе-ится. Это делает её injection sink.

Концептуально поток выглядит так:

  • User (или attacker) отправляет input.
  • Модель решает, что нужно вызвать search tool, и формирует parameters.
  • Plugin строит Python expression (lambda-фильтр), подставляя эти parameters в string.
  • Эта string выполняется.

В примере из блога показан безвредный filter вроде:

  • lambda x: x.city == 'Paris'

Но если attacker может закрыть quote и дописать дополнительный code (классическая injection mechanics), «filter» перестаёт быть только фильтром. Он становится execution primitive.

Вот в чём security point, который обобщается далеко за пределы Semantic Kernel: если strings, контролируемые model, когда-либо трактуются как code — напрямую или косвенно — у вас появляется проблема формата RCE, даже если изначально feature был всего лишь «search».

Почему это важно не только для Semantic Kernel#

Даже если вы не используете Semantic Kernel, пост — хороший reminder о том, что меняется, когда вы строите agents, а не chatbots:

  • Tool invocation — это execution interface. Ваш «prompt surface» теперь дотягивается до file systems, databases, internal APIs, а иногда и shell.
  • Agent frameworks — shared substrate. Баг в популярном tool adapter, memory component или plugin может размножиться по множеству products.
  • Prompt injection превращается в input validation плюс authorization. Ключевой вопрос не «можно ли обмануть модель», а «что происходит, когда model выводит untrusted parameters в privileged code paths».

Самый опасный pattern — и один из самых распространённых на ранних agent stacks — считать model output структурированными, но при этом доверенными данными.

Практические выводы: что проверить в своих agents#

В посте Microsoft есть общие рекомендации по remediation (патчить, оценить exposure и проверить, не было ли ранее exploitation). Если вы эксплуатируете agentic systems, самый быстрый способ превратить это в action — инвентаризировать, где model output переходит в execution.

🧭 Checklist (начните отсюда):

  • Патчите Semantic Kernel и plugins до версий, где есть исправления для CVE-2026-25592 и CVE-2026-26030 (согласно advisory Microsoft и updates