Абстрактная техническая иллюстрация на тёмно-синем поле: один маленький светящийся янтарный шестиугольный глиф агента находится в левом нижнем углу внутри большой полупрозрачной прямоугольной границы; тонкая линия тянется от него к небольшой стопке серверных панелей, заключённой в кольцо, а веер тонких голубых нитей расходится от этой стопки к десяткам маленьких глифов агентов, расположенных на широкой сетке внутри границы. Текст, люди или логотипы организаций не отображаются. Логотип OrcaRouter наложен в правом нижнем углу.
AI Safety Incidents

Один промпт, один агент, целая учётная запись AWS: внутри AgentCorruption на Amazon Bedrock AgentCore

Автор

Elias Hawthorne

Дата публикации

Новые модели · 20Все модели →
Бенчмарки: Artificial Analysis · обновляется ежедневно
Назад ко всем статьям

8 октября 2026 года, Zenity Labs раскрыла AgentCorruption: цепочка уязвимостей в Amazon Bedrock AgentCore, управляемой платформе AWS для развертывания и запуска ИИ-агентов, которая позволяла одной подсказке на естественном языке, отправленной одному публичному агенту, взять под контроль всех агентов AgentCore в том же аккаунте и регионе AWS. Исследование было опубликовано вместе с докладом на SecTor 2026 в Торонто, где директор по исследованиям безопасности Zenity, Tamir Ishay Sharbat, представил его (Dark Reading, 8 октября 2026 года). Собственный отчет Zenity, авторами которого указаны Sharbat, Lana Salameh, Dmitry Lozovoy и João Donato, начинается с механизма: агент AgentCore, имеющий любой инструмент, способный выполнить исходящий запрос, можно заставить обратиться к AWS Instance Metadata Service (IMDS) по локальному адресу 169.254.169.254, который возвращает временные учетные данные для собственной роли исполнения агента. Zenity заявляет, что экспортировала эти учетные данные на свою машину и подтвердила, что они работают оттуда. Идентификатор CVE не был присвоен.

В архиве это зафиксировано как уязвимость — нечто обнаруженное, но не обязательно использованное — с высокойстепенью серьёзности, уровнем уверенности A, отсутствием зафиксированного реального ущерба и подтверждённым участием ИИ. Стороны расходятся в трактовке, хотя согласны относительно поведения: AWS заявила Dark Reading, что исследование «неточно изображает ожидаемое и документированное поведение как уязвимость».

Чем на самом деле была цепь

AgentCore упаковывает каждого агента в контейнер и для каждой сессии запускает его в Firecracker MicroVM. Первый пост Zenity в этой серии воспроизводит всю точку опоры с помощью запроса на простом языке к тестовому агенту, созданному с помощью Strands SDK, открытого фреймворка для агентов от AWS, который поставляется со встроенным инструментом HTTP-запросов и инструментом оболочки. МикроВМ не ограничивала трафик к службе метаданных, поэтому запрос исходил изнутри экземпляра, и IMDS ответил на него. После этого исследователи прошли по эндпоинтам: имя роли IAM, сами временные учетные данные STS, эндпоинт пользовательских данных — который вернул идентификатор аккаунта, полные ARN, URL среды выполнения и Amazon Elastic Container Registry (ECR) URI образа агента — и теги экземпляра, включая цепочку сертификатов mTLS, закрытый ключ и предподписанный URL к внутреннему хранилищу. Zenity утверждает, что тот же результат был получен через инструмент оболочки, потому что сбой изоляции находится на уровне платформы, а не в каком-либо отдельном инструменте.

Две детали в этой последовательности легко упустить при чтении. Учётные данные не остались в песочнице: Zenity экспортировала их за пределы AgentCore и выполнила вызов идентификации AWS, который вернулся как принятая роль агента. А украденная роль могла загрузить образ контейнера — именно так исходный код агентов стал доступен для чтения. В публикации Zenity отмечается, что образы обычно содержат жёстко закодированные ключи, оставшиеся токены и конфигурацию, которые никогда не должны были быть вшиты, и что загруженный образ — это карта лежащей в основе бизнес-логики.

Роль по умолчанию — это место, где точка опоры превратилась в учетную запись.

Вторая уязвимость, о которой сообщалось отдельно, заключается в том, что роль выполнения, которую AgentCore по умолчанию назначал агентам, не была ограничена одним агентом. Zenity описывает разрешения, распространяющиеся на все ресурсы AgentCore в учетной записи и регионе, включая bedrock-agentcore:InvokeAgentRuntime, bedrock-agentcore:ListEvents, bedrock-agentcore:CreateEvent, bedrock-agentcore:DeleteEvent а также, на завершающем этапе цепочки, связанном с учетными данными, bedrock-agentcore:GetResourceApiKey и secretsmanager:GetSecretValue.

HTML card titled 'One prompt, one role, four capabilities', kicked 'AgentCorruption · the path Zenity Labs describes' and subtitled 'The studied attack path, with the AWS permission Zenity names at each step. No CVE was assigned; AWS disputes the vulnerability framing.' Four stacked bands run down the card. Step 1, 'Foothold through a chat message': a public-facing agent holding any tool that can make an outbound request is asked, in plain language, to fetch 169.254.169.254; the Firecracker MicroVM did not restrict traffic to the metadata service, so the request came from inside the instance and IMDS returned the agent's own execution-role credentials as a temporary STS key pair and session token. Step 2, 'Every agent in the account and region': permissions logs:DescribeLogGroups and region-wide ECR read; agent IDs were derived from CloudWatch log groups named /aws/bedrock-agentcore/runtimes/AGENT_ID-ENDPOINT_NAME, and ECR repository names followed the convention bedrock-agentcore-AGENT_NAME, so every agent's container image and source code could be pulled. Step 3, 'Conversations, sessions and persistence': permissions InvokeAgentRuntime, ListEvents, ListActors, ListSessions, CreateEvent, DeleteEvent and GetMemory; read private conversations across users and sessions, invoke internal agents, inject an assistant-role event into a live session, and plant a memory that sends the agent to an attacker-controlled page before each answer. Step 4, 'Credentials outside AWS': permissions secretsmanager:GetSecretValue and bedrock-agentcore:GetResourceApiKey; provider names recovered from scraped agent source code or by enumerating 2 x (10+26)^5 = 120,932,352 likely default names, reaching API keys and OAuth secrets for third-party services. A footer reads 'Steps and permissions as described by Zenity Labs on 8 October 2026. AWS states the behaviour described is documented and expected, and disputes the vulnerability framing. Card rendered by OrcaRouter.'

Перечислимость превратила эти подстановочные знаки в список целей. Zenity использовала разрешение роли logs:DescribeLogGroups, поскольку AgentCore присваивает группе журналов CloudWatch каждого агента имя /aws/bedrock-agentcore/runtimes/{AGENT_ID}-{ENDPOINT_NAME}, и выводила идентификаторы агентов из этих имён групп журналов. Имена репозиториев ECR следовали соглашению, которое заметили исследователи — bedrock-agentcore-<agent_name> — поэтому можно было извлечь образ каждого агента в регионе. Ресурсы памяти обнаруживались таким же образом, по шаблону группы журналов /aws/vendedlogs/bedrock-agentcore/memory/APPLICATION_LOGS/{MEMORY_ID}, а разрешения роли ListActors, ListSessions и ListEvents давали идентификаторы акторов и сессий, необходимые для чтения содержимого бесед.

В отчёте Zenity приводится конкретная демонстрация бокового перемещения: вход через публично доступного агента, обнаружение инструментов billing_agent в том же регионе, обнаружение файла с именем billing.json и его эксфильтрация через инструмент чтения файлов. В пресс-релизе тот же сценарий описывается в общих чертах — злоумышленник, входящий через доступного из интернета агента службы поддержки клиентов, может перейти к внутреннему финансовому агенту, развёрнутому в том же регионе, вызвать его и получить доступ к его данным, инструментам, связанным с ним учётным данным и приватным беседам.

Память была той частью, что пережила промпт

AgentCore Memory хранит сам разговор как кратковременную память и сохраняет извлечённые записи как долговременную память, используя стратегии с названиями SEMANTIC, USER_PREFERENCE, SUMMARIZATION и EPISODIC. В Zenity использовали CreateEvent для записи событий разговора в ресурсы памяти других агентов. В своей публикации они аккуратно описывают, что этот примитив может, а что не может: CreateEvent не позволяет вызывающему выбрать долговременное пространство имён или напрямую перезаписать запись — настроенные стратегии целевой памяти решают, что будет извлечено и куда это попадёт. Zenity также описывает, что DeleteEvent использовался для удаления событий с результатами инструментов, чтобы агент сделал неверный вывод из-за отсутствующих данных, и для заметания следов путём удаления события, которое создало память.

Результатом работы примитива записи стала персистентность. В демонстрации Zenity был внедрён запрос, чтобы агент перед ответом загрузил страницу, контролируемую исследователями, и следовал содержимому этой страницы — конечной точки командного управления, инструкции которой можно было изменять, не внедряя новую память. Затем по тому же каналу выводилось содержимое разговора: в отчёте описывается, как агент отправляет сообщения пользователя и свои собственные ответы на конечную точку сбора данных, и утверждается, что разрешения на память для роли распространялись на всю учётную запись и регион, а не только на скомпрометированного агента. Видео, опубликованное вместе с исследованием, показывает, как пользователь продолжает разговор, пока это содержимое поступает на сервер исследователей.

Учётные данные за пределами AWS

Последняя публикация в серии замыкает тему подключённых инструментов. AgentCore Identity и Outbound Auth хранят учётные данные инструментов как секреты в AWS Secrets Manager, под именами, составленными из названия провайдера и фиксированного шаблона, такого как bedrock-agentcore-identity!default/apikey/{provider_name}. Zenity восстановила названия провайдеров, спарсив исходный код агента, ранее извлечённый из ECR, а другие восстановила перебором: по её данным, стандартный пятисимвольный суффикс генерируется на стороне клиента из цифр и строчных букв, что даёт 2 x (10+26)^5 = 120,932,352 комбинаций для двух типов провайдеров. При той скорости запросов, которую она могла поддерживать к Secrets Manager, по словам Zenity, полный перебор занимает несколько часов — дольше, чем живут учётные данные STS, — поэтому она построила цикл, который заново запрашивал свежие учётные данные у конечной точки IMDS агента по мере истечения старых. Zenity добавляет, что переменные окружения были доступны для чтения через конечную точку user-data метаданных, при этом каждое имя имело префикс CONTAINER_ENV_, включая ключ, который агент использует для аутентификации у своего провайдера модели, и что вызов каждого обнаруженного агента с подходящим промптом позволял массово собирать эти значения.

Установлено и оспаривается на формальном основании.

Установленное узко и конкретно. Агенты AgentCore могли получить доступ к IMDS и получить временные учётные данные своей собственной роли выполнения — AWS это не оспаривает, описывая в своём заявлении как «документированное и ожидаемое». Стандартная роль выполнения имела разрешения, действовавшие на уровне аккаунта и региона, а не одного агента; с тех пор AWS изменила её, и Zenity заявляет, что её собственное тестирование подтвердило сокращение. Это исследование — демонстрация, а не наблюдаемая кампания: Шарбат рассказал Dark Reading, что Zenity не обнаружила доказательств эксплуатации этой уязвимости в реальных условиях до исправления, частично объяснив это сложностью выявления организаций, которые запускают агентов на AgentCore, и добавив, что он «на 100% уверен, что есть способы это сделать».

Спорным является вопрос о том, следует ли вообще что-либо из этого называть уязвимостью. Заявление AWS, в том виде, в каком оно было предоставлено Dark Reading и The Next Web, гласит: «AWS осведомлена об исследовании, опубликованном об Amazon Bedrock AgentCore, в котором ожидаемое и документированное поведение неточно представляется как уязвимость. Агент может получить доступ к ресурсам в другом аккаунте AWS, только если разработчик явно предоставит разрешения как для роли выполнения агента, так и для целевого ресурса». Заявление AWS, воспроизведённое в собственных публикациях Zenity, сохраняет суть первого предложения — «описанное поведение является документированным и ожидаемым» — и добавляет, что клиентам следует предоставлять ролям выполнения только те разрешения, которые нужны их агентам. В основе разногласия лежат два момента. AWS описывает границу с точки зрения доступа к ресурсам в другом аккаунте AWS, тогда как находка Zenity касается агентов внутри одного аккаунта AWS и одного региона; а роли, которые описывает Zenity, происходили из настроек платформы по умолчанию, а не из политики, написанной клиентом вручную.

Поправку The Next Web к собственной статье стоит зафиксировать, потому что она показывает, как утверждение было уточнено кем-то помимо самих исследователей. Сначала издание опубликовало, а затем исправило заголовок, в котором говорилось, что исследователи перехватили контроль над каждым агентом AgentCore в регионе; в исправленной версии говорится, что исследование охватывало агентов в пределах одной учетной записи AWS и одного региона, и отмечается, что в более раннем заголовке утверждение исследователей было подано как факт.

Хронология раскрытия информации

HTML card titled 'How the disclosure ran, and what AWS changed', subtitled 'Two reports, filed on different dates and answered separately. Dates as published by Zenity Labs and as reported by Dark Reading and The Next Web.' Eight rows run down a vertical timeline. 25 December 2025: Zenity Labs reports the IMDS access issue to AWS, report number one. 12 January 2026: Zenity Labs files a second report covering the over-privileged default execution role and the resulting blast radius. 14 February 2026: per AWS, as reported by Zenity, newly deployed AgentCore agents launch with IMDSv2 only, which requires a session token on each request. 25 February 2026: AWS tells Zenity the team is working on the underlying role issue, and the default execution role stays the same. 12 April 2026: AWS closes report number one as 'informative', noting the February IMDSv2 change. 22 June 2026: Zenity reviews the default execution role again and confirms its permissions are unchanged. 29 September 2026: the final pre-publication review finds substantial changes, with permissions to invoke other agents, read private conversations and access Secrets Manager removed and other permissions significantly restricted. 8 October 2026: research, press release and SecTor 2026 talk in Toronto; AWS gives its statement to press the same day; no CVE was assigned. A footer reads 'Timeline per Zenity Labs' disclosure notes, with AWS's IMDSv2 date as reported by Zenity and Dark Reading. Card rendered by OrcaRouter.'

Zenity подала два отчёта вместо одного, и ответы на них были разными. Отчёт о доступе к IMDS был отправлен 25 декабря 2025 года; AWS закрыла его 12 апреля 2026 года как «информационный», написав, что AgentCore использовала IMDSv2 только с 14 февраля 2026 года, при этом вновь развёрнутые агенты запускаются именно так. Эта правка важна для конкретных деталей данного исследования, поскольку IMDSv2 требует сессионный токен при каждом запросе и ломает простой неаутентифицированный запрос, который исследователи использовали для получения учётных данных. Второй отчёт — о роли по умолчанию и её радиусе поражения — был отправлен 12 января 2026 года. AWS сообщила Zenity 25 февраля 2026 года, что команда работает над этим, тогда как роль оставалась без изменений; Zenity пересмотрела роль снова 22 июня 2026 года и обнаружила, что её разрешения не изменились. Финальная проверка 29 сентября 2026 года показала, что роль существенно сузилась, и в пресс-релизе Zenity говорится, что удаление затронуло вызов других агентов, чтение приватных переписок и доступ к секретам в AWS Secrets Manager, а другие разрешения также были значительно ограничены. В собственных публикациях Zenity отмечается, что с тех пор AWS сделала IMDSv2 значением по умолчанию для развёртываний AgentCore и что обе стороны сотрудничали в этом процессе.

Что неизвестно

Zenity не публиковала, сколько агентов или организаций работали с ролью по умолчанию в период между февральским изменением IMDSv2 и сужением в конце сентября, и ни в одном из цитируемых источников не утверждается, что какие-либо данные клиентов были раскрыты за пределами собственной среды исследователей. Изменение IMDSv2 применяется к агентам, развёрнутым после 14 февраля 2026 года, согласно AWS, как сообщает Zenity; что это означает для агентов, развёрнутых до этой даты, в рассмотренных здесь источниках не указано. В архиве не зафиксировано реального вреда, и источники поддерживают такую трактовку, описывая демонстрацию и то, что AWS оспаривает ярлык уязвимости, а не сообщает о собственном инциденте.

Шарбат сообщил Dark Reading, что Zenity сейчас изучает другие облачные платформы на предмет аналогичных проблем с доступом к метаданным и что компания пока не называет их. Его главный вывод касается разрешений, а не только службы метаданных: «Даже если кто-то получит доступ к IMDS, радиус поражения будет намного меньше».

Почему эта запись хранится

Abstract illustration on a dark navy field of two conversational panels facing each other across a narrow gap, drawn as pale rounded rectangles holding only short unreadable dashes; through the gap between them a thin amber line passes downward into a small stack of server panels and then out again toward a single distant node at the edge of the frame. The panels are connected to nothing else. No text, people, code or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.

AgentCorruption примечателен тем, что эндпоинты метаданных — это новая идея. Шарбат обратил внимание аудитории SecTor на утечку в Capital One в 2019 году, когда SSRF добрался до IMDS и обернулся кражей учетных данных, и охарактеризовал это как нарушение принципа наименьших привилегий того же типа. Новым является то, кто выполняет запрос. Запрос, который создал идентичность AWS, был сделан агентом AWS, выполнявшим то, о чем его попросили, на простом языке, через инструмент, который ему дали, чтобы он мог быть полезен, — и агент передал ответ обратно. Двумя условиями, которые превратили это в проблему в масштабе всей учетной записи, были эндпоинт метаданных, который песочница не заблокировала, и роль по умолчанию, более широкая, чем агент, который ею обладал.

Полное исследование, включая пятичастную серию технических материалов и демонстрационное видео, доступно по ссылке из пресс-релиза Zenity от 8 октября 2026 года. Эта запись — одна из записей о задокументированных инцидентах с агентами в архиве инцидентов ИИ, где каждая запись содержит собственные источники, серьезность, степень уверенности и флаг спорности — поля, которые позволяют отличить спор вендора о трактовке, как здесь, от оспариваемого вывода о причинении вреда.

Это одна запись: её исследовали и описали другие, и здесь она процитирована с указанием на них. Остальные документированные инциденты с агентами, каждый со своими источниками, степенью серьёзности, уровнем уверенности и отметкой об оспаривании, находятся в архиве инцидентов ИИ — так что платформенную настройку по умолчанию, которая превращает один промпт в точку опоры для всей учётной записи, можно сопоставить с тем, что реально произошло в других местах.