FlawOpen

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

● CVE-2026-105812 · CVSS v4 8.8 · Haute
Recherche · FlawOpen

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]

💡 Explication en Langage Simple (ELI5)

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]
CWE-94
Contrôle inadéquat de la génération de code : des données ont été insérées dans le code généré sans encodage sûr.[2], [3]
Artefact généré
Code local ou déployé produit par l’import de l’agent. AWS indique que les artefacts concernés doivent être remplacés ; mettre seulement l’importateur à jour ne suffit pas.[1], [2]

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

LimiteCondition documentéeMesure défensive
Version du toolkitJusqu’à 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éesUn 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 utilisateurUn 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écutionL’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ésLa 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

Étape 1

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]

Étape 2

Un autre utilisateur importe l’agent

Le flux vulnérable de Starter Toolkit lit les données modifiées et génère un projet Python. La faille se situe à la frontière de génération du code ; un import ordinaire n’exécute pas immédiatement le résultat.[2], [5]

Étape 3

Des valeurs non encodées entrent dans le code Python

Jusqu’à la version 0.3.13, certaines valeurs libres de configuration étaient interpolées dans du texte de modèle Python entre guillemets sans encodage sûr en littéral.[2], [5]

Étape 4

Le projet généré est exécuté ou déployé

Lorsque l’utilisateur exécute ou déploie l’agent importé, le code généré peut s’exécuter avec ses privilèges locaux ou le rôle d’exécution AgentCore Runtime.[1], [2]

Étape 5

Mettez à jour et remplacez la sortie générée

La version 0.3.14 ajoute l’encodage des littéraux Python. Réimportez avec la version corrigée et remplacez les sorties locales et déployées ; AWS recommande de migrer du Starter Toolkit obsolète vers @aws/agentcore.[1], [5]

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

IMPLÉMENTATION VULNÉRABLE
# 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"]}
    \"""
"""
PATCH SÉCURISÉ ET ROBUSTE
# 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

Sources