flawopen.com/Teardowns/cve-2026-106032-bedrock-agentcore-openapi-reference-ssrf
CVE-2026-106032 : SSRF dans l’importateur OpenAPI AgentCore
Jusqu’à la version 0.3.13, Starter Toolkit résolvait des références OpenAPI externes lors de l’import d’agents. Des données de groupe d’actions forgées pouvaient provoquer des requêtes sortantes ou lire des fichiers locaux. Passez à la version 0.3.14 ou ultérieure, réimportez les agents concernés et remplacez les artefacts générés.[1], [2], [3]
Imaginez que l’importateur est un employé qui assemble un classeur en suivant les références d’un document. L’employé vulnérable suivait n’importe quelle référence, y compris vers l’extérieur du classeur ou vers des fichiers locaux. Un agent apparemment fiable pouvait ainsi faire récupérer ou lire des données à la machine pendant l’assemblage. Le correctif limite les références aux pages du même document.[2], [7], [8]
Concepts Clés et Termes
OpenAPI $ref- Pointeur vers un schéma ou une définition OpenAPI. Un fragment pointe dans le document courant ; une référence externe peut désigner une autre ressource.[1]
Prance ResolvingParser- Analyseur utilisé par Starter Toolkit pour charger et résoudre les références OpenAPI pendant l’import.[2]
SSRF- Server-side request forgery : une entrée non fiable pousse le logiciel à envoyer une requête depuis sa propre position réseau.[7], [8]
Correspondances de référentiels
- Référence CWE pour la faiblesse décrite dans ce guide : CWE-918
- OWASP Top 10:2025 — A01:2025 Broken Access Control
Analyse de Cause Racine
En 0.3.13, get_agent_info() transmettait le document OpenAPI du groupe d’actions directement à prance.ResolvingParser, sans limiter les types de résolution. En 0.3.14, l’importateur appelle d’abord assert_local_references_only(), qui rejette récursivement les valeurs $ref de type chaîne ne commençant pas par le préfixe de fragment interne #/, puis configure resolve_types=RESOLVE_INTERNAL. Le parseur ne récupère ainsi plus de références OpenAPI externes par ce chemin d’import. Les tests du mainteneur vérifient le rejet avant l’appel au parseur et couvrent les références HTTP, file, les chemins absolus et réseau, tout en autorisant les fragments internes. N’étendez pas ce constat à d’autres chemins de l’importateur et n’affirmez pas qu’il bloque tout accès réseau ou fichier du processus. La correction prise en charge consiste à mettre à niveau le paquet ; la comparaison montre la frontière upstream et n’est pas une recette d’exploitation. L’avis GitHub désigne @seankohjs comme personne ayant signalé la faille ; AWS remercie Koh Jun Sheng pour sa contribution à la divulgation coordonnée de la vulnérabilité.[2], [7], [8], [1]
Déroulement de l'Attaque Étape par Étape
Un principal du même compte modifie les données de l’agent
Un principal authentifié du même compte AWS doit pouvoir modifier le schéma OpenAPI du groupe d’actions Bedrock Agent afin d’y placer une valeur de référence externe spécialement conçue. Il ne s’agit pas d’une attaque Internet sans authentification.[2]
Mettez à niveau, réimportez et remplacez les artefacts
Passez à la version 0.3.14 ou ultérieure, réimportez les agents importés avec des versions concernées et remplacez les artefacts locaux et déployés. Migrez de Starter Toolkit, désormais obsolète, vers @aws/agentcore lorsque c’est possible.[1], [8]
Code Source : Vulnérable vs Sécurisé
Ces extraits proviennent des distributions officielles 0.3.13 et 0.3.14. Le correctif rejette les références $ref externes avant l’exécution de Prance et limite le résolveur aux références internes. Les tests upstream vérifient le rejet avant le parseur et l’acceptation des fragments internes. Il s’agit d’une comparaison ciblée du code source, pas d’un exemple de requête ; mettez le paquet à niveau au lieu de copier ces extraits.[7], [8], [2]
Extrait source: Extraits de l’importateur AgentCore, versions 0.3.13 et 0.3.14
# 0.3.13 : le parseur résout les références du document OpenAPI.
parser = ResolvingParser(
spec_string=json.dumps(action_group["apiSchema"]["payload"])
)
action_group["apiSchema"]["payload"] = parser.specification
# 0.3.14 : rejeter les références externes avant l’analyse.
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}]")
Liste de Contrôle de Sécurité pour l'Ingénierie
- ✓Recensez les environnements qui installent bedrock-agentcore-starter-toolkit ; les versions 0.1.4 à 0.3.13 sont concernées.[2]
- ✓Passez à la version 0.3.14 ou ultérieure, ou migrez vers le CLI @aws/agentcore recommandé par AWS ; Starter Toolkit est obsolète.[1], [2]
- ✓Réimportez chaque agent importé avec une version concernée et remplacez ses artefacts locaux et déployés ; la mise à niveau seule ne corrige pas les anciennes sorties.[1]
- ✓Limitez bedrock:CreateAgentActionGroup, bedrock:UpdateAgentActionGroup et bedrock:AssociateAgentCollaborator aux principaux de confiance pendant la migration.[2]
- ✓N’importez pas les agents dont le schéma OpenAPI ou les champs associés ont pu être modifiés par un principal non fiable du même compte.[2]
- ✓Dans vos importateurs, rejetez les références OpenAPI externes avant d’appeler le résolveur et testez le rejet avant l’exécution du parseur.[8]
- ✓Distinguez cette CVE de
CVE-2026-105812: celle-ci concerne les références pendant l’import ; l’autre, le Python généré non sûr.[6], [2]
Sources
- Bulletin AWS 2026-127
- Avis du mainteneur GHSA-5xmr-2rcp-3j75
- Fiche 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 : Contrôle externe du nom ou du chemin de fichier