FlawOpen

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

● CVE-2026-105812 · CVSS v4 8.8 · Hoch
Sicherheitsforschung · FlawOpen

CVE-2026-105812: Code-Injection beim AgentCore-Import

Bis Version 0.3.13 des Bedrock AgentCore Starter Toolkit konnte Agentkonfiguration ohne sichere Kodierung in generierten Python-Code gelangen. Ein zweiter Nutzer, der den Agenten importierte und anschließend ausführte oder bereitstellte, konnte Code mit seinen lokalen Berechtigungen oder der AgentCore-Runtime-Ausführungsrolle starten. Ein Paket-Upgrade repariert bereits erzeugte Artefakte nicht.[1], [2], [3]

💡 Einfache Erklärung (ELI5)

Der Importer ähnelt einem Etikettendrucker, der Agenteneinstellungen in Python-Anweisungen umwandelt. Vor der Korrektur wurden manche Werte ohne sicheres Escaping zwischen Anführungszeichen eingefügt. Ein Anführungszeichen im Wert konnte den Text vorzeitig beenden, sodass der Rest als Python-Syntax gelesen wurde. Die Korrektur kodiert den Wert als Python-Stringliteral und hält ihn damit als Daten fest.[2], [5]

Kernkonzepte & Begriffe

Agentenimport
Workflow des Starter Toolkit, der die Konfiguration eines Bedrock-Agenten liest und ein lokales Python-Projekt für ein Framework wie Strands oder LangChain erzeugt.[2], [5]
Codegenerierung
Erzeugung von Quellcode durch Kombination von Programmvorlagen mit Konfigurationswerten oder anderen Eingaben.[2], [5]
Python-Stringliteral
Quelltextnotation, die Text als Daten darstellt. repr() liefert eine zitierte Darstellung mit maskierten Zeichen, damit sie keine Python-Syntax werden.[5]
CWE-94
Unzureichende Kontrolle der Codegenerierung: Eingabedaten wurden ohne sichere Kodierung in erzeugten Quellcode eingefügt.[2], [3]
Generiertes Artefakt
Lokaler oder bereitgestellter Code, der beim Import des Agenten entsteht. Laut AWS müssen betroffene Artefakte ersetzt werden; ein Upgrade des Importers allein reicht nicht.[1], [2]

Framework-Zuordnungen

  • CWE-Referenz für die in diesem Leitfaden beschriebene Schwachstelle: CWE-94

Ursachenanalyse

Der verwundbare Import-Übersetzer erzeugte Python mit f-Strings und Vorlagen, in die Werte des Bedrock-Agenten direkt eingesetzt wurden, darunter Prompts und weitere Konfigurationsfelder. Werte mit Python-Stringbegrenzern konnten den vorgesehenen Textkontext verlassen. Der Patch 0.3.14 ergänzt python_string_literal() mit repr(str(value)) und python_data_literal() zur Normalisierung JSON-kompatibler Daten und leitet erzeugte Zeichenketten durch diese Encoder. Der Maintainer-Hinweis beschreibt die Kette: Ein authentifizierter Principal im selben Konto muss Agentendaten ändern können; ein anderer Nutzer importiert den Agenten und führt das erzeugte Projekt später aus oder stellt es bereit. Der Code läuft mit den lokalen Rechten des Importierenden oder der AgentCore-Runtime-Ausführungsrolle. AWS zufolge reicht ein Upgrade für Artefakte aus verwundbaren Versionen nicht; mit 0.3.14 oder neuer neu importieren und lokale sowie bereitgestellte Ausgaben ersetzen. CVE-2026-106032 betrifft separat externe OpenAPI-Referenzen beim Import und nicht diese Codegenerierungs-Schwachstelle.

Wann die Schwachstelle im generierten Code erreichbar ist

GrenzeDokumentierte BedingungSchutzmaßnahme
Toolkit-VersionVersionen bis einschließlich 0.3.13 fügen bestimmte Werte ohne sichere Literal-Kodierung in generierten Python-Code ein.Auf Version 0.3.14 oder höher aktualisieren oder zu @aws/agentcore migrieren.
Wer die Daten ändern kannEin authentifizierter Principal desselben AWS-Kontos kann relevante Felder des Bedrock Agent ändern.Schreibrechte für Agent-Daten auf vertrauenswürdige Principals beschränken.
Import durch eine zweite PersonEin zweiter Benutzer importiert den geänderten Agent über den betroffenen Starter-Toolkit-Ablauf.Agent-Daten anderer Principals als nicht vertrauenswürdig behandeln und vor dem Import ihre Herkunft prüfen.
Auslöser der AusführungDer importierende Benutzer führt das generierte Projekt aus oder stellt es bereit; der Code läuft mit lokalen Rechten oder der AgentCore-Runtime-Rolle.Mit isolierten Zugangsdaten und Runtime-Rollen mit minimalen Rechten importieren und testen.
Bereits generierte ArtefakteEin Paket-Upgrade repariert keine Projekte, die zuvor mit betroffenen Versionen generiert wurden.Mit der korrigierten Version erneut importieren und lokale sowie bereitgestellte Artefakte ersetzen.

Schritt-für-Schritt Angriffsablauf

Schritt 1

Ein Principal desselben Kontos kann Agentendaten ändern

Voraussetzung ist ein authentifizierter Principal im AWS-Konto mit Berechtigungen zum Ändern relevanter Bedrock-Agent-Felder, etwa Aktionsgruppen-Schemas, Kollaborationsanweisungen oder Prompt-Overrides.[2]

Schritt 2

Ein zweiter Nutzer importiert den Agenten

Der betroffene Starter-Toolkit-Workflow liest die geänderten Daten und erzeugt ein Python-Projekt. Die Schwachstelle liegt an der Grenze der Codegenerierung; ein gewöhnlicher Import führt das Ergebnis nicht sofort aus.[2], [5]

Schritt 3

Nicht kodierte Werte gelangen in Python-Quelltext

Bis einschließlich 0.3.13 wurden manche freien Konfigurationswerte ohne sichere Literal-Kodierung in zitierten Python-Vorlagentext interpoliert.[2], [5]

Schritt 4

Das erzeugte Projekt wird ausgeführt oder bereitgestellt

Beim Ausführen oder Bereitstellen des importierten Agenten kann der generierte Code mit den lokalen Rechten des Nutzers oder der AgentCore-Runtime-Ausführungsrolle laufen.[1], [2]

Schritt 5

Aktualisieren und generierte Ausgabe ersetzen

Version 0.3.14 ergänzt die Kodierung von Python-Literalen. Mit der korrigierten Version neu importieren und lokale sowie bereitgestellte Ausgaben ersetzen; AWS empfiehlt die Migration vom eingestellten Starter Toolkit zu @aws/agentcore.[1], [5]

Quellcode: Verwundbar vs. Sicher

Dieser gezielte Ausschnitt aus dem Upstream-Diff zeigt, dass der verwundbare Übersetzer Konfiguration in eine dreifach zitierte Python-Zeichenkette interpolierte. Die Korrektur übergibt den vollständigen Text an python_string_literal(), das ihn mit repr() als Daten maskiert. Version 0.3.14 wendet dasselbe Prinzip auf weitere erzeugte Zeichenketten und JSON-kompatible Daten an. Regressionstests parsen die Ausgabe und prüfen, dass Markierungstext eine Stringkonstante bleibt. Der Ausschnitt analysiert Quellcode und enthält weder einen injizierten Wert noch einen ausführbaren Exploit.[2], [5]

Quelltextauszug: services/import_agent/scripts/base_bedrock_translate.py und services/import_agent/utils.py — gezielter PRE_PROCESSING-Promptausschnitt

VERWUNDBARE IMPLEMENTIERUNG
# Vor der Korrektur in 0.3.14: Der Vorlagenwert wurde direkt in Python-Quelltext mit dreifachen Anführungszeichen eingesetzt.
self.prompts_code += f"""
    PRE_PROCESSING_TEMPLATE=\"""\n
    {config["basePromptTemplate"]["system"]}
    \"""
"""
GEHÄRTETER SICHERHEITS-PATCH
# 0.3.14: Den vollständigen Wert als Python-Stringliteral kodieren
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))

Checkliste für Engineering & Systemsicherheit

Quellen