flawopen.com/Teardowns/cve-2026-106032-bedrock-agentcore-openapi-reference-ssrf
CVE-2026-106032: SSRF en el importador OpenAPI de AgentCore
Hasta la versión 0.3.13, Starter Toolkit resolvía referencias OpenAPI externas al importar agentes. Datos manipulados de un grupo de acciones podían provocar solicitudes salientes o lectura de archivos locales. Actualiza a 0.3.14 o posterior, vuelve a importar los agentes afectados y reemplaza los artefactos generados.[1], [2], [3]
Imagina que el importador es un empleado que arma una carpeta siguiendo las referencias de un documento. El empleado vulnerable seguía cualquier referencia, incluso fuera de la carpeta o hacia archivos locales. Así, un agente aparentemente confiable podía hacer que el equipo buscara o leyera datos durante la importación. La corrección limita las referencias a páginas del mismo documento.[2], [7], [8]
Conceptos Clave y Términos
OpenAPI $ref- Puntero a un esquema o definición OpenAPI. Un fragmento apunta dentro del documento actual; una referencia externa puede señalar otro recurso.[1]
Prance ResolvingParser- Parser que Starter Toolkit utiliza para cargar y resolver referencias OpenAPI durante la importación.[2]
SSRF- Server-side request forgery: datos no confiables hacen que el software envíe solicitudes desde su propia posición de red.[7], [8]
Mapeos de marcos
- Referencia CWE para la debilidad descrita en esta guía: CWE-918
- OWASP Top 10:2025 — A01:2025 Broken Access Control
Análisis de Causa Raíz
En 0.3.13, get_agent_info() pasaba el OpenAPI del grupo de acciones directamente a prance.ResolvingParser, sin restringir los tipos de resolución. En 0.3.14, el importador llama primero a assert_local_references_only(), que rechaza recursivamente valores $ref de tipo string que no comienzan con el prefijo de fragmento interno #/, y configura resolve_types=RESOLVE_INTERNAL. Así evita que el parser obtenga referencias OpenAPI externas por esta ruta de importación. Las pruebas del mantenedor verifican el rechazo antes de invocar el parser y cubren referencias HTTP, file, rutas absolutas y rutas de red, mientras permiten fragmentos internos. No extiendas este hallazgo a otras rutas del importador ni afirmes que bloquea todo acceso a red o archivos del proceso. La solución admitida es actualizar; la comparación muestra la frontera upstream, no una receta de explotación. El aviso de GitHub identifica a @seankohjs como quien reportó la vulnerabilidad; AWS agradece a Koh Jun Sheng su colaboración en la divulgación coordinada.[2], [7], [8], [1]
Flujo de Ataque Paso a Paso
Un principal de la misma cuenta modifica datos del agente
Un principal autenticado de la misma cuenta de AWS debe poder modificar el esquema OpenAPI del grupo de acciones de Bedrock Agent para colocar allí un valor de referencia externa diseñado para este fin. No es un ataque por internet sin autenticación.[2]
Código Fuente: Vulnerable vs. Seguro
Estos fragmentos proceden de las distribuciones oficiales 0.3.13 y 0.3.14. La corrección rechaza referencias $ref externas antes de ejecutar Prance y limita el resolver a referencias internas. Las pruebas upstream comprueban el rechazo previo al parser y la aceptación de fragmentos internos. Es una comparación acotada del código fuente, no un ejemplo de solicitud; actualiza el paquete en lugar de copiar los fragmentos.[7], [8], [2]
Fragmento de origen: Fragmentos del importador AgentCore, versiones 0.3.13 y 0.3.14
# 0.3.13: el parser resuelve referencias del documento OpenAPI.
parser = ResolvingParser(
spec_string=json.dumps(action_group["apiSchema"]["payload"])
)
action_group["apiSchema"]["payload"] = parser.specification
# 0.3.14: rechaza las referencias externas antes de analizar.
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 Verificación de Seguridad para Ingeniería
- ✓Inventaría los entornos con bedrock-agentcore-starter-toolkit; están afectadas las versiones 0.1.4 a 0.3.13.[2]
- ✓Actualiza a 0.3.14 o posterior o migra al CLI @aws/agentcore recomendado por AWS; Starter Toolkit está obsoleto.[1], [2]
- ✓Vuelve a importar los agentes importados con versiones afectadas y reemplaza los artefactos locales y desplegados; actualizar el paquete no corrige resultados antiguos.[1]
- ✓Restringe bedrock:CreateAgentActionGroup, bedrock:UpdateAgentActionGroup y bedrock:AssociateAgentCollaborator a principales de confianza mientras migras.[2]
- ✓No importes agentes cuyos esquemas OpenAPI u otros campos pertinentes puedan haber sido modificados por un principal no confiable de la misma cuenta.[2]
- ✓En importadores propios, rechaza referencias OpenAPI externas antes del resolver y prueba que se rechacen antes de ejecutar el parser.[8]
- ✓Mantén esta CVE separada de
CVE-2026-105812: aquella trata de Python generado inseguro; esta, de resolver referencias durante la importación.[6], [2]
Fuentes
- Boletín de seguridad AWS 2026-127
- Aviso del 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: Control externo del nombre o la ruta de archivo