FlawOpen

flawopen.com/Teardowns/cve-2026-105812-bedrock-agentcore-generated-code-injection

● CVE-2026-105812 · CVSS v4 8.8 · Alta
Pesquisa · FlawOpen

CVE-2026-105812: injeção de código no importador AgentCore

Até a versão 0.3.13 do Bedrock AgentCore Starter Toolkit, dados de configuração de um agente podiam ser inseridos no Python gerado sem codificação segura. Um segundo usuário que importasse e depois executasse ou implantasse o agente poderia rodar código com seus privilégios locais ou com o papel de execução do AgentCore Runtime. Atualizar o pacote não corrige artefatos já gerados.[1], [2], [3]

💡 Explicação em Linguagem Simples (ELI5)

O importador funciona como uma impressora de etiquetas que transforma configurações do agente em instruções Python. Antes da correção, alguns valores eram colados entre aspas sem escape seguro. Uma aspa no dado podia encerrar o texto antes da hora e fazer o restante ser lido como sintaxe Python. A correção codifica o valor como literal de string, mantendo-o como dado.[2], [5]

Conceitos Centrais e Termos

Importação de agente
Fluxo do Starter Toolkit que lê a configuração de um agente Bedrock e gera um projeto Python local para frameworks como Strands ou LangChain.[2], [5]
Geração de código
Criação de código-fonte ao combinar modelos de programa com valores vindos de configuração ou de outras entradas.[2], [5]
Literal de string Python
Notação-fonte que representa texto como dado. repr() retorna uma representação entre aspas com caracteres escapados para que não virem sintaxe Python.[5]
CWE-94
Controle inadequado da geração de código: dados foram inseridos no código-fonte gerado sem codificação segura.[2], [3]
Artefato gerado
Código local ou implantado produzido pela importação do agente. A AWS informa que artefatos afetados precisam ser substituídos; só atualizar o importador não basta.[1], [2]

Mapeamentos de frameworks

  • Referência CWE para a fraqueza descrita neste guia: CWE-94

Análise de Causa Raiz

O tradutor de importação vulnerável montava código Python com f-strings e texto de modelo que interpolava diretamente valores do agente Bedrock, incluindo prompts e outros campos de configuração. Valores com delimitadores de string Python podiam sair do contexto de texto pretendido. A correção 0.3.14 introduz python_string_literal() com repr(str(value)) e python_data_literal() para normalizar dados JSON, e passa strings geradas por esses codificadores. O aviso do mantenedor delimita a cadeia: um principal autenticado na mesma conta precisa poder alterar dados do agente; outro usuário importa o agente e depois executa ou implanta o projeto gerado. O código roda com os privilégios locais do importador ou com o papel de execução do AgentCore Runtime. A AWS diz que atualizar não basta para artefatos gerados por versões afetadas; importe novamente com 0.3.14 ou posterior e substitua as saídas locais e implantadas. A CVE-2026-106032 separada trata de referências OpenAPI externas durante a importação, não desta falha de geração de código.

Quando a falha de código gerado pode ser alcançada

LimiteCondição documentadaAção defensiva
Versão do toolkitVersões até 0.3.13 inserem alguns valores no Python gerado sem codificação segura de literais.Atualize para 0.3.14 ou posterior, ou migre para @aws/agentcore.
Quem pode alterar os dadosUm principal autenticado na mesma conta AWS pode modificar campos relevantes do Bedrock Agent.Restrinja permissões de escrita dos dados do agente a principais confiáveis.
Importação por outro usuárioUm segundo usuário importa o agente modificado pelo fluxo afetado do Starter Toolkit.Trate dados de agentes de outros principais como não confiáveis e revise a procedência antes da importação.
Gatilho de execuçãoO usuário que importa executa ou implanta o projeto gerado; o código roda com privilégios locais ou com a função do AgentCore Runtime.Importe e teste com credenciais e funções de runtime isoladas e com privilégios mínimos.
Saída já geradaAtualizar o pacote não corrige projetos criados anteriormente por versões afetadas.Reimporte com a versão corrigida e substitua os artefatos locais e implantados.

Fluxo de Ataque Passo a Paso

Passo 1

Um principal da mesma conta pode alterar os dados do agente

O pré-requisito é um principal autenticado na conta AWS com permissão para mudar campos relevantes do agente Bedrock, como esquemas de grupos de ação, instruções de colaboração ou substituições de prompt.[2]

Passo 2

Outro usuário importa o agente

O fluxo afetado do Starter Toolkit lê os dados alterados e gera um projeto Python. A vulnerabilidade está na fronteira do código gerado; uma importação comum não executa imediatamente o resultado.[2], [5]

Passo 3

Valores sem codificação entram no código Python

Nas versões até 0.3.13, alguns valores de configuração livres eram interpolados em texto de modelo Python entre aspas sem codificação segura como literal.[2], [5]

Passo 4

O projeto gerado é executado ou implantado

Quando o usuário executa ou implanta o agente importado, o código gerado pode rodar com os privilégios locais do usuário ou com o papel de execução do AgentCore Runtime.[1], [2]

Passo 5

Atualize e substitua o resultado gerado

A versão 0.3.14 adiciona codificação de literais Python. Importe novamente com a versão corrigida e substitua as saídas locais e implantadas; a AWS recomenda migrar do Starter Toolkit descontinuado para @aws/agentcore.[1], [5]

Código-Fonte: Vulnerável vs. Seguro

Este trecho focado do diff upstream mostra que o tradutor vulnerável interpolava a configuração em uma string Python entre aspas triplas; a correção passa o texto completo por python_string_literal(), que usa repr() para escapá-lo como dado. A versão 0.3.14 aplica o mesmo princípio às outras strings geradas e aos dados compatíveis com JSON, além de incluir testes de regressão que analisam a saída e verificam que o texto marcador continua sendo uma constante de string. O trecho é uma análise do código-fonte, não um valor injetado nem uma exploração executável.[2], [5]

Trecho de origem: services/import_agent/scripts/base_bedrock_translate.py e services/import_agent/utils.py — trecho focado do prompt PRE_PROCESSING

IMPLEMENTAÇÃO VULNERÁVEL
# Antes da correção 0.3.14: o valor do modelo era inserido diretamente no código Python entre aspas triplas.
self.prompts_code += f"""
    PRE_PROCESSING_TEMPLATE=\"""\n
    {config["basePromptTemplate"]["system"]}
    \"""
"""
PATCH SEGURO E ROBUSTO
# 0.3.14: codifique o valor completo como um literal de string 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))

Lista de Verificação de Segurança para Engenharia

Fontes