flawopen.com/Teardowns/cve-2026-106032-bedrock-agentcore-openapi-reference-ssrf
CVE-2026-106032: SSRF no importador OpenAPI do AgentCore
Versões até 0.3.13 do Starter Toolkit resolviam referências OpenAPI externas ao importar agentes, permitindo que dados de grupo de ação causassem requisições de saída ou leitura de arquivos locais. Atualize para 0.3.14 ou posterior, reimporte os agentes afetados e substitua os artefatos gerados.[1], [2], [3]
Pense no importador como um funcionário que monta uma pasta seguindo as referências de uma especificação. O funcionário vulnerável seguia qualquer referência, inclusive para fora da pasta ou para arquivos locais. Assim, um agente aparentemente confiável podia fazer a estação de trabalho buscar ou ler dados durante a montagem. A correção limita as referências às páginas que já estão no mesmo documento.[2], [7], [8]
Conceitos Centrais e Termos
OpenAPI $ref- Ponteiro para um esquema ou definição OpenAPI. Um fragmento aponta para dentro do documento atual; uma referência externa pode indicar outro recurso.[1]
Prance ResolvingParser- Parser usado pelo Starter Toolkit para carregar e resolver referências OpenAPI durante a importação.[2]
SSRF- Server-side request forgery: dados não confiáveis fazem o software enviar uma solicitação a partir da posição de rede do próprio software.[7], [8]
Mapeamentos de frameworks
- Referência CWE para a fraqueza descrita neste guia: CWE-918
- OWASP Top 10:2025 — A01:2025 Broken Access Control
Análise de Causa Raiz
Na versão 0.3.13, get_agent_info() carregava o OpenAPI do grupo de ação e o passava diretamente a prance.ResolvingParser, sem restringir os tipos de resolução. Na versão 0.3.14, o importador chama assert_local_references_only() antes do parser e configura resolve_types=RESOLVE_INTERNAL. A verificação recursiva rejeita valores string de $ref que não começam com o prefixo de fragmento interno #/. Os testes do mantenedor verificam a rejeição antes da chamada ao parser e cobrem referências HTTP, file, caminhos absolutos e caminhos de rede, permitindo fragmentos internos. Não generalize isso para outros caminhos do importador nem afirme que bloqueia todo acesso à rede ou a arquivos do processo. A correção suportada é atualizar; o diff ilustra a fronteira upstream, não uma receita de exploração. O aviso do GitHub identifica @seankohjs como responsável pelo relato; a AWS agradece a Koh Jun Sheng pela colaboração na divulgação coordenada da vulnerabilidade.[2], [7], [8], [1]
Fluxo de Ataque Passo a Paso
Um principal da mesma conta altera dados do agente
Um principal autenticado na mesma conta AWS precisa poder modificar o esquema OpenAPI do grupo de ações do Bedrock Agent para inserir ali um valor externo de referência criado de forma maliciosa. Não se trata de um ataque pela internet sem autenticação.[2]
Código-Fonte: Vulnerável vs. Seguro
Os trechos são das distribuições oficiais 0.3.13 e 0.3.14. A correção rejeita referências $ref externas antes do Prance e limita também o resolver a referências internas. Testes upstream confirmam a rejeição antes do parser e a aceitação de fragmentos internos. É uma comparação focada do código-fonte, não um exemplo de requisição; atualize em vez de copiar os trechos para uma aplicação.[7], [8], [2]
Trecho de origem: Trechos do importador AgentCore, versões 0.3.13 e 0.3.14
# 0.3.13: o parser resolve referências do documento OpenAPI.
parser = ResolvingParser(
spec_string=json.dumps(action_group["apiSchema"]["payload"])
)
action_group["apiSchema"]["payload"] = parser.specification
# 0.3.14: rejeite referências externas antes de analisar.
assert_local_references_only(action_group["apiSchema"]["payload"])
parser = ResolvingParser(
spec_string=json.dumps(action_group["apiSchema"]["payload"]),
resolve_types=RESOLVE_INTERNAL,
)
def assert_local_references_only(node, path: str = "$") -> None:
if isinstance(node, dict):
reference = node.get("$ref")
if isinstance(reference, str) and not reference.startswith("#/"):
raise ValueError(
f"External OpenAPI references are not supported: {reference!r} at {path}."
)
for key, child in node.items():
assert_local_references_only(child, f"{path}.{key}")
elif isinstance(node, list):
for index, child in enumerate(node):
assert_local_references_only(child, f"{path}[{index}]")
Lista de Verificação de Segurança para Engenharia
- ✓Inventarie ambientes com bedrock-agentcore-starter-toolkit; versões 0.1.4 a 0.3.13 são afetadas.[2]
- ✓Atualize para 0.3.14 ou posterior, ou migre para o CLI @aws/agentcore recomendado pela AWS, pois o Starter Toolkit foi descontinuado.[1], [2]
- ✓Reimporte cada agente importado com uma versão afetada e substitua os artefatos locais e implantados; atualizar o pacote não corrige saídas antigas.[1]
- ✓Restrinja bedrock:CreateAgentActionGroup, bedrock:UpdateAgentActionGroup e bedrock:AssociateAgentCollaborator a principais confiáveis enquanto a migração estiver pendente.[2]
- ✓Não importe agentes cujos esquemas OpenAPI ou outros campos relevantes possam ter sido alterados por um principal não confiável da mesma conta.[2]
- ✓No código de importação que você mantém, rejeite referências OpenAPI externas antes de chamar o resolver e teste que a rejeição ocorre antes do parser.[8]
- ✓Mantenha esta CVE separada da
CVE-2026-105812: aquela trata de Python gerado inseguro; esta, de resolução de referências durante a importação.[6], [2]
Fontes
- Boletim AWS 2026-127
- Aviso do mantenedor GHSA-5xmr-2rcp-3j75
- Registro CVE-2026-106032
- NVD CVE-2026-106032
- MITRE CWE-918
- PyPI source distribution 0.3.13 (SHA-256: 6dc3df3719ce64f7e996fca63baedd15c922066271ce18f7a66cd7c24599bf8c)
- PyPI source distribution 0.3.14 (SHA-256: 2632c456926596061c3f4079b85d39be1b0aec95b2882048501517e5c3695c85)
- MITRE CWE-73: Controle externo do nome ou caminho de arquivo