flawopen.com/Teardowns/cve-2026-105812-bedrock-agentcore-generated-code-injection
CVE-2026-105812 : injection dans l’importateur AgentCore
Jusqu’à la version 0.3.13 de Bedrock AgentCore Starter Toolkit, des paramètres d’agent pouvaient être insérés dans le Python généré sans encodage sûr. Un autre utilisateur qui importait puis exécutait ou déployait l’agent pouvait lancer du code avec ses privilèges locaux ou le rôle d’exécution AgentCore Runtime. La mise à jour du paquet ne corrige pas les artefacts déjà générés.[1], [2], [3]
L’importateur ressemble à une étiqueteuse qui transforme les paramètres d’un agent en instructions Python. Avant le correctif, certaines valeurs étaient collées entre guillemets sans échappement sûr. Un guillemet dans la donnée pouvait fermer le texte trop tôt et faire interpréter la suite comme de la syntaxe Python. Le correctif encode la valeur comme littéral de chaîne pour qu’elle reste une donnée.[2], [5]
Concepts Clés et Termes
Import d’agent- Flux de Starter Toolkit qui lit la configuration d’un agent Bedrock et produit un projet Python local pour un framework comme Strands ou LangChain.[2], [5]
Génération de code- Construction de code source en combinant des modèles de programme et des valeurs issues d’une configuration ou d’autres entrées.[2], [5]
Littéral de chaîne Python- Notation source représentant du texte comme une donnée.
repr()renvoie une représentation entre guillemets où les caractères sont échappés afin qu’ils ne deviennent pas de la syntaxe Python.[5]
Correspondances de référentiels
- Référence CWE pour la faiblesse décrite dans ce guide : CWE-94
Analyse de Cause Racine
Le traducteur d’import vulnérable construisait du Python avec des f-strings et des modèles qui interpolait directement les valeurs de l’agent Bedrock, notamment les prompts et d’autres champs de configuration. Des valeurs contenant des délimiteurs de chaîne Python pouvaient sortir du contexte de texte prévu. Le correctif 0.3.14 ajoute python_string_literal() avec repr(str(value)) et python_data_literal() pour normaliser les données JSON, puis fait passer les chaînes générées par ces encodeurs. L’avis du mainteneur précise la chaîne : un principal authentifié du même compte doit pouvoir modifier les données de l’agent ; un autre utilisateur importe ensuite l’agent, puis exécute ou déploie le projet produit. Le code s’exécute avec les privilèges locaux de l’importateur ou le rôle d’exécution AgentCore Runtime. AWS précise qu’une mise à jour ne suffit pas pour les artefacts issus de versions vulnérables : réimportez avec la version 0.3.14 ou ultérieure et remplacez les sorties locales et déployées. La CVE-2026-106032 distincte concerne les références OpenAPI externes pendant l’import, pas cette génération de code.
Conditions d’accessibilité de la faille de génération de code
| Limite | Condition documentée | Mesure défensive |
|---|---|---|
| Version du toolkit | Jusqu’à la version 0.3.13, certaines valeurs étaient insérées dans le code Python généré sans encodage sûr des littéraux. | Passez à la version 0.3.14 ou ultérieure, ou migrez vers @aws/agentcore. |
| Qui peut modifier les données | Un principal authentifié du même compte AWS peut modifier des champs pertinents de Bedrock Agent. | Réservez les droits d’écriture sur les données d’agent aux principaux de confiance. |
| Importation par un autre utilisateur | Un second utilisateur importe l’agent modifié via le flux concerné du Starter Toolkit. | Considérez comme non fiables les données d’agent provenant d’autres principaux et vérifiez leur provenance avant importation. |
| Déclenchement de l’exécution | L’utilisateur qui importe exécute ou déploie le projet généré ; le code s’exécute avec ses privilèges locaux ou le rôle AgentCore Runtime. | Importez et testez avec des identifiants et des rôles d’exécution isolés et à privilèges minimaux. |
| Artefacts déjà générés | La mise à niveau du paquet ne corrige pas les projets déjà générés par les versions concernées. | Réimportez avec la version corrigée et remplacez les artefacts locaux et déployés. |
Déroulement de l'Attaque Étape par Étape
Un principal du compte peut modifier les données de l’agent
Le prérequis est un principal authentifié dans le compte AWS disposant des droits de modifier des champs Bedrock Agent pertinents, tels que les schémas de groupes d’action, les instructions de collaboration ou les substitutions de prompt.[2]
Code Source : Vulnérable vs Sécurisé
Cet extrait ciblé du diff amont montre que le traducteur vulnérable interpolait la configuration dans une chaîne Python entre triples guillemets ; le correctif transmet le texte complet à python_string_literal(), qui utilise repr() pour l’échapper comme donnée. La version 0.3.14 applique le même principe aux autres chaînes générées et aux données compatibles JSON, et ajoute des tests de régression qui analysent la sortie pour vérifier que le texte marqueur reste une constante chaîne. Il s’agit d’une analyse du code source, pas d’une valeur injectée ni d’un exploit exécutable.[2], [5]
Extrait source: services/import_agent/scripts/base_bedrock_translate.py et services/import_agent/utils.py — extrait ciblé du prompt PRE_PROCESSING
# Avant le correctif 0.3.14 : la valeur du modèle était insérée directement dans du code Python entre triples guillemets.
self.prompts_code += f"""
PRE_PROCESSING_TEMPLATE=\"""\n
{config["basePromptTemplate"]["system"]}
\"""
"""
# 0.3.14 : encoder la valeur entière comme littéral de chaîne 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))
Liste de Contrôle de Sécurité pour l'Ingénierie
- ✓Inventoriez les postes de développement et tâches CI utilisant
bedrock-agentcore-starter-toolkit, y compris les forks et copies vendored, pas seulement le manifeste de dépendances.[1], [2] - ✓Passez à la version 0.3.14 ou ultérieure, ou migrez vers la CLI prise en charge
@aws/agentcore; Starter Toolkit est obsolète.[1], [2] - ✓Réimportez les agents produits avec une version vulnérable et remplacez les artefacts locaux et déployés. La mise à jour du paquet laisse l’ancien code généré en place.[1], [2]
- ✓Limitez
bedrock:CreateAgentActionGroup,bedrock:UpdateAgentActionGroupetbedrock:AssociateAgentCollaboratoraux principaux de confiance, comme le recommande l’avis du mainteneur.[2] - ✓Vérifiez quels champs Bedrock Agent d’autres principaux du compte peuvent modifier avant de les importer dans un environnement de développement privilégié.[2]
- ✓Ajoutez un test de régression qui analyse le Python généré et vérifie que des marqueurs contrôlés restent dans des constantes de chaîne, jamais dans une nouvelle affectation ou instruction exécutable.[5]
- ✓Exécutez les agents importés avec des identifiants locaux et rôles runtime de moindre privilège pour limiter l’impact d’une future faille du générateur.[1]
- ✓Gardez la
CVE-2026-106032distincte : elle concerne le SSRF et l’accès à des fichiers locaux via des références OpenAPI pendant l’import, avec une autre frontière et un autre correctif.[6], [9]
Sources
- AWS Security Bulletin 2026-127-AWS
- Maintainer advisory GHSA-37r5-8xpw-vxp9
- CVE-2026-105812 record
- NVD record for CVE-2026-105812
- Upstream fix commit 38545b1
- Separate CVE-2026-106032 maintainer advisory
- Control Plane coverage, October 7, 2026 (attention signal)
- TechGeeks coverage, October 6, 2026 (attention signal)