FlawOpen

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

● CVE-2026-105812 · CVSS v4 8.8 · Alta
Investigación · FlawOpen

CVE-2026-105812: inyección en importador AgentCore

Hasta la versión 0.3.13 de Bedrock AgentCore Starter Toolkit, la configuración de un agente podía incorporarse al Python generado sin codificación segura. Un segundo usuario que importara y después ejecutara o desplegara el agente podía ejecutar código con sus privilegios locales o con el rol de ejecución de AgentCore Runtime. Actualizar el paquete no corrige los artefactos ya generados.[1], [2], [3]

💡 Explicación en Lenguaje Sencillo (ELI5)

El importador se parece a una etiquetadora que convierte la configuración del agente en instrucciones Python. Antes del arreglo, algunos valores se pegaban entre comillas sin escaparse de forma segura. Una comilla en el dato podía cerrar el texto antes de tiempo y hacer que lo siguiente se interpretara como sintaxis Python. El arreglo codifica el valor como literal de cadena para conservarlo como dato.[2], [5]

Conceptos Clave y Términos

Importación de agentes
Flujo de Starter Toolkit que lee la configuración de un agente Bedrock y genera un proyecto Python local para frameworks como Strands o LangChain.[2], [5]
Generación de código
Creación de código fuente al combinar plantillas de programa con valores de configuración u otras entradas.[2], [5]
Literal de cadena Python
Notación fuente que representa texto como dato. repr() devuelve una representación entrecomillada con caracteres escapados para que no se conviertan en sintaxis Python.[5]
CWE-94
Control inadecuado de la generación de código: se insertaron datos en el código fuente generado sin codificación segura.[2], [3]
Artefacto generado
Código local o desplegado producido al importar el agente. AWS indica que hay que sustituir los artefactos afectados; actualizar solo el importador no basta.[1], [2]

Mapeos de marcos

  • Referencia CWE para la debilidad descrita en esta guía: CWE-94

Análisis de Causa Raíz

El traductor vulnerable construía código Python con f-strings y plantillas que interpolaban directamente valores del agente Bedrock, incluidos prompts y otros campos de configuración. Los valores con delimitadores de cadenas Python podían salir del contexto de texto previsto. El parche 0.3.14 añade python_string_literal() mediante repr(str(value)) y python_data_literal() para normalizar datos JSON, y pasa las cadenas generadas por estos codificadores. El aviso del mantenedor acota la cadena: un principal autenticado de la misma cuenta debe poder modificar datos del agente; otro usuario importa el agente y luego ejecuta o despliega el proyecto generado. El código resultante se ejecuta con los privilegios locales del importador o el rol de ejecución de AgentCore Runtime. AWS indica que actualizar no basta para los artefactos creados con versiones afectadas: vuelva a importar con 0.3.14 o posterior y sustituya las salidas locales y desplegadas. La CVE-2026-106032 es distinta: trata de referencias OpenAPI externas durante la importación, no de esta generación de código.

Cuándo se puede alcanzar el fallo de código generado

LímiteCondición documentadaMedida defensiva
Versión del toolkitLas versiones hasta la 0.3.13 insertan algunos valores en Python generado sin codificación segura de literales.Actualiza a 0.3.14 o posterior, o migra a @aws/agentcore.
Quién puede modificar los datosUn principal autenticado de la misma cuenta de AWS puede modificar campos pertinentes de Bedrock Agent.Limita los permisos de escritura de datos del agente a principales de confianza.
Importación por otra personaUn segundo usuario importa el agente modificado mediante el flujo afectado de Starter Toolkit.Trata como no confiables los datos de agentes de otros principales y revisa su procedencia antes de importarlos.
Activación de la ejecuciónEl usuario que importa ejecuta o despliega el proyecto generado; el código se ejecuta con privilegios locales o con el rol de AgentCore Runtime.Importa y prueba con credenciales y roles de ejecución aislados y con privilegios mínimos.
Artefactos ya generadosActualizar el paquete no corrige proyectos generados anteriormente con versiones afectadas.Vuelve a importar con la versión corregida y reemplaza los artefactos locales y desplegados.

Flujo de Ataque Paso a Paso

Paso 1

Un principal de la cuenta puede modificar los datos del agente

El requisito previo es un principal autenticado en la cuenta de AWS con permisos para cambiar campos relevantes de Bedrock Agent, como esquemas de grupos de acciones, instrucciones de colaboración o sustituciones de prompts.[2]

Paso 2

Otro usuario importa el agente

El flujo afectado de Starter Toolkit lee los datos modificados y genera un proyecto Python. El fallo está en el límite de generación de código; una importación normal no ejecuta inmediatamente el resultado.[2], [5]

Paso 3

Los valores entran en Python sin codificarse

En versiones hasta la 0.3.13, algunos valores de configuración libres se interpolaban en plantillas Python entrecomilladas sin codificación segura como literal.[2], [5]

Paso 4

Se ejecuta o despliega el proyecto generado

Al ejecutar o desplegar el agente importado, el código puede hacerlo con los privilegios locales del usuario o el rol de AgentCore Runtime.[1], [2]

Paso 5

Actualice y sustituya la salida generada

La versión 0.3.14 incorpora codificación de literales Python. Vuelva a importar con la versión corregida y sustituya las salidas locales y desplegadas; AWS recomienda migrar del Starter Toolkit obsoleto a @aws/agentcore.[1], [5]

Código Fuente: Vulnerable vs. Seguro

Este fragmento del diff ascendente muestra que el traductor vulnerable interpolaba la configuración en una cadena Python entre comillas triples; la corrección pasa el texto completo por python_string_literal(), que usa repr() para escaparlo como dato. La versión 0.3.14 aplica el mismo principio a otras cadenas generadas y a datos compatibles con JSON, e incluye pruebas de regresión que analizan la salida y comprueban que el texto marcador sigue siendo una constante de cadena. El fragmento analiza el código fuente; no contiene un valor inyectado ni una explotación ejecutable.[2], [5]

Fragmento de origen: services/import_agent/scripts/base_bedrock_translate.py y services/import_agent/utils.py — fragmento específico del prompt PRE_PROCESSING

IMPLEMENTACIÓN VULNERABLE
# Antes de la corrección 0.3.14: el valor de la plantilla se insertaba directamente en código Python entre comillas triples.
self.prompts_code += f"""
    PRE_PROCESSING_TEMPLATE=\"""\n
    {config["basePromptTemplate"]["system"]}
    \"""
"""
PARCHE SEGURO Y ROBUSTO
# 0.3.14: codifica el valor completo como un literal de cadena de 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 Verificación de Seguridad para Ingeniería

Fuentes