flawopen.com/Teardowns/cve-2026-105812-bedrock-agentcore-generated-code-injection
CVE-2026-105812: внедрение кода при импорте AgentCore
В версиях Bedrock AgentCore Starter Toolkit до 0.3.14 конфигурация агента могла попадать в сгенерированный Python-код без безопасного кодирования. Другой пользователь, импортировавший, а затем запустивший или развернувший агента, мог выполнить код с локальными правами или ролью выполнения AgentCore Runtime. Обновление пакета не исправляет уже созданные артефакты.[1], [2], [3]
Импортёр похож на принтер этикеток, который превращает настройки агента в инструкции Python. До исправления некоторые значения вставлялись между кавычками без безопасного экранирования. Кавычка в значении могла преждевременно завершить строку, и остаток текста становился синтаксисом Python. Исправление кодирует значение как строковый литерал Python, сохраняя его данными.[2], [5]
Ключевые понятия и термины
Импорт агента- Процесс Starter Toolkit, который читает конфигурацию агента Bedrock и создаёт локальный проект Python для фреймворка, например Strands или LangChain.[2], [5]
Генерация кода- Создание исходного кода путём объединения шаблонов программы со значениями конфигурации и другими входными данными.[2], [5]
Строковый литерал Python- Запись в исходном коде, представляющая текст как данные.
repr()возвращает заключённое в кавычки представление с экранированными символами, чтобы они не стали синтаксисом Python.[5]
Связи со стандартами
- Ссылка CWE для слабого места, описанного в этом руководстве: CWE-94
Анализ первопричины
Уязвимый преобразователь при импорте формировал Python-код с помощью f-строк и шаблонов, напрямую подставляя значения Bedrock-агента, включая промпты и другие поля конфигурации. Значения с разделителями строк Python могли выйти из предусмотренного текстового контекста. В исправлении 0.3.14 добавлены python_string_literal() на основе repr(str(value)) и python_data_literal() для нормализации JSON-совместимых данных; сгенерированные строки проходят через эти кодировщики. Согласно уведомлению сопровождающего, цепочка требует, чтобы аутентифицированный участник той же учётной записи мог менять данные агента; затем другой пользователь импортирует агента и запускает или развёртывает созданный проект. Код выполняется с локальными правами импортирующего пользователя или ролью выполнения AgentCore Runtime. AWS подчёркивает, что обновление не исправляет артефакты из уязвимых версий: нужно повторить импорт с 0.3.14 или новее и заменить локальные и развёрнутые результаты. Отдельная CVE-2026-106032 относится к внешним ссылкам OpenAPI при импорте, а не к этой генерации кода.
Условия эксплуатации уязвимости генерации кода
| Граница | Документированное условие | Защитное действие |
|---|---|---|
| Версия toolkit | Версии до 0.3.14 включали некоторые значения в генерируемый Python без безопасного кодирования строковых литералов. | Обновите toolkit до версии 0.3.14 или новее либо перейдите на @aws/agentcore. |
| Кто может изменить данные | Аутентифицированный субъект в той же учётной записи AWS может изменять соответствующие поля Bedrock Agent. | Ограничьте права записи данных агента доверенными субъектами. |
| Импорт другим пользователем | Другой пользователь импортирует изменённого агента через уязвимый процесс Starter Toolkit. | Считайте данные агента от других субъектов недоверенными и проверяйте их происхождение перед импортом. |
| Условие выполнения | Импортирующий пользователь запускает или развёртывает созданный проект; код выполняется с его локальными правами или ролью AgentCore Runtime. | Импортируйте и тестируйте с изолированными учётными данными и ролями runtime с минимальными правами. |
| Ранее созданные артефакты | Обновление пакета не исправляет проекты, созданные уязвимыми версиями ранее. | Повторно импортируйте агента с исправленной версией и замените локальные и развёрнутые артефакты. |
Пошаговый сценарий атаки
Участник той же учётной записи может изменить данные агента
Необходимое условие: аутентифицированный участник учётной записи AWS имеет право менять соответствующие поля Bedrock Agent, например схемы групп действий, инструкции совместной работы или переопределения промптов.[2]
Исходный код: Уязвимый vs Защищённый вариант
Этот фрагмент исправления в upstream-коде показывает, что уязвимый преобразователь напрямую подставлял конфигурацию в строку Python с тройными кавычками. Исправление передаёт готовый текст в python_string_literal(), которая использует repr() и экранирует его как данные. В версии 0.3.14 тот же принцип применяется к другим сгенерированным строкам и JSON-совместимым данным; регрессионные тесты разбирают результат и проверяют, что маркер остаётся строковой константой. Это анализ исходного кода, а не внедрённое значение или исполняемый эксплойт.[2], [5]
Фрагмент исходного кода: services/import_agent/scripts/base_bedrock_translate.py и services/import_agent/utils.py — фрагмент шаблона PRE_PROCESSING
# До исправления в 0.3.14 значение шаблона напрямую вставлялось в исходный код Python с тройными кавычками.
self.prompts_code += f"""
PRE_PROCESSING_TEMPLATE=\"""\n
{config["basePromptTemplate"]["system"]}
\"""
"""
# 0.3.14: кодировать всё значение как строковый литерал Python
prompt = f"\n\n {config['basePromptTemplate']['system']}\n "
self.prompts_code += f"\n PRE_PROCESSING_TEMPLATE={python_string_literal(prompt)}\n"
# services/import_agent/utils.py
def python_string_literal(value: Any) -> str:
return repr(str(value))
Чек-лист по защите системы для инженеров
- ✓Найдите рабочие станции и задания CI с
bedrock-agentcore-starter-toolkit, включая форки и локальные vendored-копии, а не только записи в манифесте зависимостей.[1], [2] - ✓Обновите пакет до 0.3.14 или новее либо перейдите на поддерживаемую CLI
@aws/agentcore; Starter Toolkit устарел.[1], [2] - ✓Повторно импортируйте агентов, созданных уязвимой версией, и замените локальные и развёрнутые артефакты. Обновление пакета оставляет старый исходный код на месте.[1], [2]
- ✓Ограничьте
bedrock:CreateAgentActionGroup,bedrock:UpdateAgentActionGroupиbedrock:AssociateAgentCollaboratorдоверенными участниками, как рекомендует уведомление сопровождающего.[2] - ✓Проверьте, какие поля Bedrock Agent могут менять другие участники учётной записи, прежде чем импортировать эти данные в привилегированную среду разработки.[2]
- ✓Добавьте регрессионный тест, который разбирает сгенерированный Python и проверяет, что контролируемая маркерная строка остаётся строковой константой, а не новой присваивающей или исполняемой инструкцией.[5]
- ✓Запускайте импортированных агентов с локальными учётными данными и ролями runtime с минимальными правами, чтобы ограничить последствия будущей ошибки генератора.[1]
- ✓Рассматривайте
CVE-2026-106032отдельно: она касается SSRF и доступа к локальным файлам через внешние ссылки OpenAPI при импорте и имеет другую уязвимую границу и исправление.[6], [9]
Источники
- AWS Security Bulletin 2026-127-AWS
- Maintainer advisory GHSA-37r5-8xpw-vxp9
- CVE-2026-105812 record
- NVD record for CVE-2026-105812
- Upstream fix commit 38545b1
- Separate CVE-2026-106032 maintainer advisory
- Control Plane coverage, October 7, 2026 (attention signal)
- TechGeeks coverage, October 6, 2026 (attention signal)