Проблема запутанного заместителя

Проблема запутанного заместителя — это уязвимость в области информационной безопасности, когда одна компьютерная программа (заместитель), обладающая более широкими полномочиями, по ошибке выполняет действия в интересах другой программы или пользователя с меньшими правами, тем самым неправильно используя свои полномочия в системе. Этот тип атаки представляет собой частный случай повышения привилегий. Проблема запутанного заместителя часто приводится в качестве аргумента в пользу безопасности на основе полномочий.

Системы безопасности на основе полномочий защищают от проблемы запутанного заместителя, тогда как системы, основанные на списках управления доступом, не защищают.

В 2026 году проблема была адаптирована под специфику ИИ-агентов, обрабатывающих инструкции и внешний контент через один и тот же механизм. ИИ-агент, не способный проверить происхождение инструкций, встроенных во внешние данные (например, при атаках типа внедрения подсказок — prompt injection), становится «запутанным заместителем». В контексте агентов на базе больших языковых моделей данная уязвимость классифицируется в актуальных матрицах угроз как AML.T0051 в MITRE ATLAS и LLM01 в OWASP Top 10 for LLM[1].[2]

Пример

В классическом примере, описывающем проблему запутанного заместителя[3], на коммерческом сервисе с разделением времени был доступен компилятор. Пользователь мог запустить компилятор и, при необходимости, указать имя файла для записи отладочных данных; компилятор записывал данные при наличии у пользователя соответствующих прав.

Компилятор также собирал статистику по использованию языковых конструкций. Эта статистика сохранялась в файле «(SYSX)STAT» в директории SYSX. Для этого компилятору предоставили права на запись в директорию SYSX.

Однако в SYSX лежали и другие файлы, в частности — биллинговая информация системы в файле «(SYSX)BILL». Пользователь запустил компилятор и в качестве выходного отладочного файла указал «(SYSX)BILL».

В результате возникла проблема запутанного заместителя. Компилятор обратился к операционной системе с запросом открыть файл «(SYSX)BILL». Несмотря на то, что у пользователя не было доступа к этому файлу, у компилятора такие права были, поэтому запрос был выполнен успешно. Компилятор записал отладочные данные, перезаписав файл, и информация о биллинге была уничтожена.

Теоретический анализ

В этом примере программой-заместителем выступает компилятор, так как он действует по запросу пользователя. Компилятор оказался «запутан», потому что был обманом вынужден перезаписать файл учёта системы.

При каждом обращении программы к файлу операционная система должна знать два параметра: к какому файлу обращается программа и есть ли у неё право доступа к нему. В приведённом примере имя файла — «(SYSX)BILL» — передаётся от пользователя программе, но компилятор не знает, имел ли сам пользователь право на запись в файл. Операционная система использует права самого компилятора, а не пользователя. Когда имя файла передаётся от пользователя программе, соответствующие права явно не передаются; система увеличивает права по умолчанию и автоматически.

Для атаки не принципиально, что файл биллинга указывается строковым именем. Важно, что:

  • идентификатор файла не содержит всех полномочий, необходимых для доступа;
  • используются права самой программы, что происходит неявно.

Эта ситуация иллюстрирует концепцию «окружающих полномочий» (ambient authority). В таких системах полномочия неявно присутствуют в среде выполнения и привязаны к идентичности программы, а не передаются явно вместе с каждым конкретным запросом. Наличие фоновых полномочий по умолчанию позволяет злоумышленнику обмануть программу-заместителя и заставить её использовать свои привилегии[4].[5]

В традиционных системах контроля доступа на основе субъекта (identity-based) права привязаны к субъекту, и при выполнении операции проверяются права самой программы, а не инициатора запроса. В отличие от них, в системах на основе мандатов (capability-based) используется токен, который неразрывно связывает идентификацию объекта и авторизацию действия с ним. Использование простого текстового имени файла без встроенного токена прав является фундаментальным дефектом проектирования, так как оно искусственно разделяет механизм указания цели и механизм авторизации[6].[7]

Сетевые и веб-уязвимости

undefined

Межсайтовая подделка запроса (CSRF) — пример атаки через запутанного заместителя, когда веб-браузер используется для выполнения чувствительных действий в отношении веб-приложения. Часто такая атака возможна, если веб-приложение аутентифицирует все запросы, идущие от браузера, используя cookie. При помощи JavaScript злоумышленник может принудить браузер отправлять аутентифицированные HTTP-запросы.

Компьютерный червь Samy использовал межсайтовый скриптинг (XSS) для превращения аутентифицированной сессии MySpace в браузере в запутанного заместителя. Используя XSS, червь заставлял браузер размещать собственную копию в качестве сообщения, которое затем просматривали друзья заражённого пользователя.

Кликджекинг — атака, при которой уже сам пользователь становится запутанным заместителем. Пользователь считает, что просто просматривает сайт (контролируемый злоумышленником), но на самом деле его обманом заставляют совершить чувствительное действие на другом сайте.

Атака FTP bounce позволяет злоумышленнику косвенно подключиться к портам TCP, которые недоступны напрямую, используя внешний FTP-сервер как запутанного заместителя.

Ещё один пример касается персональных брандмауэров, которые позволяют ограничивать доступ к Интернету только для определённых приложений. Некоторые приложения обходят это ограничение, запуская браузер с передачей ему инструкции открыть конкретный URL. У браузера есть полномочия на установление сетевого соединения, хотя у самого приложения их нет. Некоторые брандмауэры пытаются решать эту проблему, предупреждая пользователя, если одна программа запускает другую, а вторая выходит в сеть. Однако пользователь часто не располагает сведениями для принятия решения — ложные срабатывания обычны, и даже опытные пользователи могут привыкнуть автоматически нажимать «OK»[8].

В протоколах OAuth 2.0 и OpenID Connect (OIDC) проблема запутанного заместителя может проявляться при эксплуатации серверов-посредников, обращающихся к сторонним API. Используя украденные коды авторизации, атакующие могут получать токены доступа без ведома пользователя. Одним из главных векторов компрометации являются атаки на перенаправление (Redirect URI), когда злоумышленники манипулируют параметром redirect_uri для перехвата кода авторизации или токена (например, через обход валидации пути, использование уязвимостей открытого перенаправления или захват устаревших поддоменов). Также угрозу представляет подмена клиента (Client Impersonation) и смежные техники, такие как Mix-Up атаки и подмена браузера (Browser Swapping), при которых атакующий обманом заставляет жертву авторизоваться и использует полученный ответ для входа под её аккаунтом. Для защиты от подобных уязвимостей применяются механизмы PKCE, строгая проверка параметра state, отказ от передачи кодов в строке запроса и строгая валидация точных значений redirect_uri[9][10][11].

Важно отметить, что не каждая программа, неверно использующая полномочия, является запутанным заместителем. В некоторых случаях это результат обычной программной ошибки. Проблема запутанного заместителя проявляется, когда ссылка на объект (например, на файл) передаётся от одной программы к другой, а права доступа меняются неявно, без явных действий со стороны участников атаки. Этот тип атаки коварен, потому что ни одна из сторон не делала чего-либо явно для изменения полномочий.

Облачные сервисы

Проблема запутанного заместителя в облачных инфраструктурах часто проявляется при атаках подделки межсерверных запросов (SSRF) на сервисы метаданных. В AWS защита IMDSv2 нейтрализует атаки через простые GET-запросы, однако может быть обойдена, если уязвимость позволяет приложению отправлять PUT/POST-запросы, неверно настроен лимит переходов (hop limit) или не отключена поддержка устаревшей версии IMDSv1[12][13]. В Azure для извлечения токенов управляемой идентификации (Managed Identity) через SSRF-запросы требуется наличие HTTP-заголовка Metadata: true[12]. В Google Cloud Platform (GCP) атаки на сервер метаданных (в том числе с параметром recursive=true для выгрузки всего дерева метаданных за один запрос) требуют заголовка Metadata-Flavor: Google, что считается слабой защитой, так как многие уязвимости позволяют добавлять пользовательские заголовки[12][13].

Другим проявлением проблемы являются кросс-тенантные атаки на облачные API, при которых идентификаторы ресурсов используются без проверки принадлежности. В Azure Automation уязвимость CVE-2025-29827 позволяла использовать свой аккаунт для захвата идентичности другого тенанта и управления его ресурсами. В Azure API Management уязвимость обхода пути позволяла пользователю с базовыми правами на чтение заставить сервис обращаться к ресурсам любого другого тенанта[14].

В 2026 году независимый исследователь безопасности Джастин О'Лири раскрыл информацию о двух уязвимостях класса «запутанный заместитель» в облачных сервисах. 12 мая 2026 года была выявлена уязвимость в сервисе резервного копирования Azure Kubernetes Service, позволявшая повысить привилегии с базового уровня до администратора кластера. 18 июня 2026 года была обнаружена уязвимость в GCP Config Connector: плагин не проверял права пользователя через Google IAM и передавал идентификатор чужой организации напрямую в API с повышенными привилегиями. Это позволяло злоумышленнику с базовым доступом получить права владельца организации GCP с полным административным контролем, причём атака маскировалась под легитимную активность сервисного аккаунта[15].

Операционные системы и EDR

Проблема запутанного заместителя используется для обхода механизмов контроля доступа в современных операционных системах и отключения систем защиты (EDR/XDR)[16]. Злоумышленники применяют доверенные системные процессы для обхода политик безопасности:

  • Обход защиты TCC в macOS (CVE-2025-43530): системная служба com.apple.scrod автоматически доверяла любому процессу с цифровой подписью Apple. С помощью внедрения вредоносного кода или TOCTOU-атак злоумышленники маскировались под доверенный процесс и выполняли команды AppleScript для доступа к защищённым данным без прав root, минуя запросы TCC[17].
  • Отключение EDR и MDM в macOS (CVE-2026-39118): уязвимость позволяет обычным пользователям отключать агенты безопасности. Атака эксплуатирует слабую валидацию XPC-сообщений, инъекцию вредоносных NIB-файлов и злоупотребление кэшем доверия ядра, в результате чего доверенные процессы выполняют команды злоумышленника по деактивации защиты[18].
  • Обход UAC в Windows: использование службы Appinfo.dll, проверяющей запуск файлов из доверенных каталогов. Злоумышленник создаёт поддельную директорию с пробелом (например, C:\Windows \System32). При проверке пути функция GetLongPathNameW удаляет пробел, и проверка успешно проходится для легитимного каталога, после чего на выполнение с правами администратора отправляется вредоносный файл из поддельной директории.

Искусственный интеллект и автономные агенты

В контексте больших языковых моделей (LLM) и мультиагентных систем проблема запутанного заместителя возникает, когда ИИ-агент, обладающий широкими правами доступа, обрабатывает ненадёжные внешние данные (веб-страницы, электронные письма, документы) и пользовательские инструкции через один и тот же языковой механизм. Злоумышленник может внедрить скрытые команды во внешние источники, осуществляя непрямое внедрение промпта (indirect prompt injection). Поскольку агент не способен отличить подлинные инструкции от вредоносных манипуляций, он воспринимает их как легитимные директивы и выполняет несанкционированные действия, используя свои высокие привилегии[19].

Архитектура данной уязвимости структурно идентична классическому примеру проблемы запутанного заместителя:

  • Роль вызывающего пользователя выполняет оператор или источник вредоносного контента, инициирующий внедрение скрытых инструкций[19].
  • Роль доверенного компилятора играет сам ИИ-агент, выступающий посредником с делегированными полномочиями (например, API-ключами или токенами доступа)[20].
  • Роль защищаемого файла биллинга выполняют целевые системы, инструменты и данные (репозитории кода, облачная инфраструктура, почтовые сервисы), которые подвергаются несанкционированному доступу или утечке[19].

Уязвимость активно эксплуатируется при вызове функций (Tool Calling). Модель может сгенерировать безопасный текстовый ответ, но одновременно выполнить скрытый вызов инструмента для несанкционированного экспорта конфиденциальных данных или злоупотребить ресурсами системы[21]. Одним из методов атаки является визуальный обман (Prompt Injection Clickjacking), при котором вредоносные инструкции делаются невидимыми для человека (например, с помощью белого шрифта на белом фоне), но успешно считываются токенизатором языковой модели. При обработке такого документа ИИ-агент применяет свои легитимные разрешения и выполняет скрытые команды без ведома пользователя[22].

Инциденты в ИИ-системах

В феврале 2026 года была зафиксирована атака на ИИ-помощника Cline AI, получившая название «Clinejection». Злоумышленники осуществили промпт-инъекцию через заголовок задачи на GitHub. ИИ-агент Claude, отвечавший за автоматическую обработку задач, воспринял вредоносный заголовок как легитимную инструкцию. В результате бот выполнил произвольные команды в среде GitHub Actions, что позволило атакующим похитить токены публикации npm и выпустить скомпрометированную версию пакета Cline CLI со скрытым сторонним программным обеспечением[23][24].

Уязвимость CVE-2026-21520 («ShareLeak») в Microsoft Copilot Studio стала примером непрямой промпт-инъекции, эксплуатирующей проблему «запутанного заместителя». Неаутентифицированный злоумышленник мог внедрить скрытые инструкции через публичные формы SharePoint. ИИ-агент, обрабатывая эти данные с легитимными правами доступа, извлекал конфиденциальную информацию и пересылал её атакующему (например, через Outlook). Уязвимость была устранена на стороне облачного сервиса в январе 2026 года[25][26].

Решения

В некоторых системах можно попросить операционную систему открыть файл, используя права другого клиента. Такой подход имеет ряд недостатков:

  • он требует явного внимания к вопросам безопасности со стороны сервера; неопытный или небрежный сервер может пропустить этот шаг;
  • становится сложнее определить необходимые права, если сервер сам является клиентом другого сервиса и передаёт права дальше;
  • клиент должен доверять серверу, что тот не будет злоупотреблять предоставленными полномочиями. Заметим, что пересечение прав сервера и клиента не устраняет проблему, так как серверу, возможно, потребуется очень широкий набор полномочий для обслуживания разных клиентов.

Самый простой способ решения проблемы запутанного заместителя — связывать воедино идентификатор объекта (например, файла) и полномочие на доступ к нему. Такой подход реализован в модели полномочий.

Если использовать модель полномочий в приведённом выше примере с компилятором, клиент передаёт серверу не имя файла, а полномочие, например, дескриптор файла, который предоставляет право на доступ к файлу. Если у пользователя нет полномочия на файл биллинга, он не сможет передать его для записи. В случае с межсайтовой подделкой запроса URL «с другого сайта» может содержать собственные полномочия, не зависящие от полномочий клиента в браузере.

Эксперты отмечают, что традиционные списки контроля доступа (ACL) неэффективны против новых угроз со стороны ИИ-агентов из-за неспособности различать данные и инструкции или анализировать визуальный контекст. Это требует внедрения независимых механизмов внешней верификации и строгой авторизации[27].

Для защиты современных систем применяются следующие решения:

  • Аппаратная защита CHERI (Capability Hardware Enhanced RISC Instructions) — предотвращает подмену контекста доступа на уровне ядра за счёт использования аппаратно-защищённых дескрипторов (capabilities) с заданными границами и правами[28].
  • Песочницы на базе WebAssembly — обеспечивают изоляцию сторонних плагинов в безопасной линейной памяти с моделью запрета по умолчанию (deny-by-default), устраняя фоновые привилегии[29].
  • Протоколы делегирования с ограниченной областью действия (Macaroons, Biscuits) — используют токены, к которым при передаче прав можно добавлять криптографически подписанные ограничения, формируя проверяемую цепочку делегирования[30].
  • Архитектура Intent-Aware Runtime Authorization (IARA) — анализирует каждое действие агента в реальном времени, проверяя его соответствие изначальному намерению пользователя, а не только статическим техническим разрешениям[31].
  • Фреймворк MCPSHIELD — использует неподделываемые «наборы возможностей» (capability sets) со строгими параметрами и ограниченным временем жизни вместо предоставления широких разрешений, что предотвращает выполнение рискованных цепочек действий[32].

Примечания

  1. CSA Research Note: AI Agent Confused Deputy & Prompt Injection. Cloud Security Alliance. Дата обращения: 27 августа 2026.
  2. LLM Threat Classification. arXiv. Дата обращения: 27 августа 2026.
  3. The Confused Deputy (or why capabilities might have been invented) (англ.). Дата обращения: 31 декабря 2003. Архивировано 5 декабря 2003 года.
  4. CSA Research Note: AI Agent Confused Deputy & Prompt Injection. Дата обращения: 27 августа 2026.
  5. Confused Deputy Problem and Ambient Authority. Дата обращения: 27 августа 2026.
  6. Confused Deputy Problem. MIT CSAIL. Дата обращения: 27 августа 2026.
  7. The Confused Deputy: (or why capabilities might have been invented). University of Texas at Austin (1988). Дата обращения: 27 августа 2026.
  8. Alfred Spiessens: Patterns of Safe Collaboration, PhD thesis. Section 8.1.5 (англ.). Дата обращения: 27 августа 2026.
  9. Атаки на OAuth 2.0: Redirect URI Manipulation, перехват токенов и Authorization Code Interception на практике. Codeby. Дата обращения: 27 августа 2026.
  10. Browser Swapping: A New Attack Vector in OAuth 2.0 (англ.). SySS Blog. Дата обращения: 27 августа 2026.
  11. Security Considerations for OAuth 2.0 and OIDC (англ.). Model Context Protocol (28 июля 2026). Дата обращения: 27 августа 2026.
  12. 1 2 3 SSRF, IMDSv2, STS, and Cloud Privilege Escalation. Cyberfortify. Дата обращения: 27 августа 2026.
  13. 1 2 IMDS Anomaly Hunting: Zero-Day. Wiz. Дата обращения: 27 августа 2026.
  14. Azure's Hidden Operators: A Threat Model for Platform-Level Managed Identities. Vectra AI. Дата обращения: 27 августа 2026.
  15. Confused Deputy Flaws Persist in Google Cloud, Microsoft Azure. Daily.dev. Дата обращения: 27 августа 2026.
  16. The Confused Deputy Problem Explained. BeyondTrust Blog. BeyondTrust (15 мая 2023). Дата обращения: 27 августа 2026.
  17. Нарушение защиты TCC в macOS. UZCERT. UZCERT (1 ноября 2025). Дата обращения: 27 августа 2026.
  18. Critical CVE-2026-39118 Vulnerability in macOS Allows Users to Disable Kandji MDM and CrowdStrike EDR Security Agents. Rescana (10 июля 2026). Дата обращения: 27 августа 2026.
  19. 1 2 3 CSA Research Note: AI Agent Confused Deputy & Prompt Injection. Cloud Security Alliance Labs. Дата обращения: 27 августа 2026.
  20. When Trusted Tools Go Rogue: The Return of the Confused Deputy Problem. Security Brief Australia. Дата обращения: 27 августа 2026.
  21. Agent Tool Call Safety Gap. Promptfoo. Дата обращения: 27 августа 2026.
  22. AI Agents Security: Prompt Injection Local Lab. daehnhardt.com (20 июня 2026). Дата обращения: 27 августа 2026.
  23. Clinejection: When Your AI Tool Installs Another. Grith.ai (19 февраля 2026). Дата обращения: 27 августа 2026.
  24. Post-Mortem: Unauthorized Cline CLI npm Package Release. Cline.bot (20 февраля 2026). Дата обращения: 27 августа 2026.
  25. CVE-2026-21520: Microsoft Copilot Studio Indirect Prompt Injection. SentinelOne (15 января 2026). Дата обращения: 27 августа 2026.
  26. After the identity fix: MCPS' Confused Deputy problem. SC World (20 января 2026). Дата обращения: 27 августа 2026.
  27. AI Agent Security: Ineffectiveness of Traditional ACLs. arXiv.org. Дата обращения: 27 августа 2026.
  28. CHERI: Hardware-Enhanced Capabilities. LWN.net. Дата обращения: 27 августа 2026.
  29. AI Sandbox Guide. Cosmonic. Дата обращения: 27 августа 2026.
  30. Agent Security: Delegation Chain. Okta. Дата обращения: 27 августа 2026.
  31. Saviynt Expands Identity Security for AI Solution with Intent-Aware Runtime Authorization for AI Agents. Saviynt. Дата обращения: 27 августа 2026.
  32. MCPSHIELD Framework. AlphaXiv. Дата обращения: 27 августа 2026.

Категории