FlawOpen

flawopen.com/Teardowns/cve-2026-106032-bedrock-agentcore-openapi-reference-ssrf

● CVE-2026-106032 · CVSS v4 5.7 · Mittel
Sicherheitsforschung · FlawOpen

CVE-2026-106032: SSRF im AgentCore-OpenAPI-Importer

Bis Version 0.3.13 löste das Starter Toolkit beim Agentenimport externe OpenAPI-Referenzen auf. Manipulierte Aktionsgruppendaten konnten dadurch ausgehende Anfragen oder lokale Dateizugriffe auslösen. Aktualisieren Sie auf 0.3.14 oder neuer, importieren Sie betroffene Agenten erneut und ersetzen Sie erzeugte Artefakte.[1], [2], [3]

💡 Einfache Erklärung (ELI5)

Stellen Sie sich den Importer als Büroangestellten vor, der anhand der Verweise in einem Dokument einen Ordner zusammenstellt. Der verwundbare Angestellte folgte jedem Verweis, auch außerhalb des Ordners oder zu lokalen Dateien. Ein scheinbar vertrauenswürdiger Agent konnte den Rechner so während des Zusammenstellens Daten abrufen oder lesen lassen. Die Korrektur beschränkt Verweise auf Seiten im selben Dokument.[2], [7], [8]

Kernkonzepte & Begriffe

OpenAPI $ref
Verweis auf ein OpenAPI-Schema oder eine Definition. Ein Fragment verweist innerhalb des aktuellen Dokuments; ein externer Verweis kann eine andere Ressource bezeichnen.[1]
Prance ResolvingParser
Parser, den das Starter Toolkit beim Agentenimport zum Laden und Auflösen von OpenAPI-Verweisen verwendet.[2]
SSRF
Server-Side Request Forgery: Nicht vertrauenswürdige Eingaben veranlassen Software, Anfragen aus ihrer eigenen Netzwerkposition zu senden.[7], [8]
CWE-918
Die strukturierte primäre cweId im CVE-Eintrag ist CWE-918 (Server-Side Request Forgery). Die Beschreibung nennt außerdem CWE-73 für den Aspekt extern gesteuerter Dateipfade.[2], [3], [5]
CWE-73: External Control of File Name or Path
Derselbe CVE-Eintrag nennt CWE-73, externe Kontrolle von Dateiname oder Pfad, für den Aspekt des Lesens lokaler Dateien. CWE-73 steht in der Beschreibung des Problemtyps; CWE-918 ist die strukturierte primäre cweId.[3], [9]

Framework-Zuordnungen

Ursachenanalyse

In Version 0.3.13 übergab get_agent_info() die OpenAPI-Daten einer Aktionsgruppe direkt an prance.ResolvingParser, ohne die Auflösungstypen einzuschränken. Version 0.3.14 ruft zuerst assert_local_references_only() auf. Diese rekursive Prüfung weist Stringwerte in $ref zurück, die nicht mit dem internen Fragmentpräfix #/ beginnen, und setzt anschließend resolve_types=RESOLVE_INTERNAL. Dadurch ruft der Parser über diesen Importpfad keine externen OpenAPI-Referenzen mehr ab. Die Maintainer-Tests prüfen die Zurückweisung vor dem Parseraufruf und decken HTTP-, file-, absolute und Netzwerkpfade ab; interne Fragmente bleiben zulässig. Übertragen Sie diesen Befund nicht auf andere Importpfade und behaupten Sie nicht, der Prozess sei damit gegen jeden Netzwerk- oder Dateizugriff geschützt. Die unterstützte Korrektur ist das Upgrade; der Codevergleich zeigt die Upstream-Grenze und ist keine Exploit-Anleitung. Das GitHub-Advisory nennt @seankohjs als meldende Person; AWS dankt Koh Jun Sheng für die Mitwirkung an der koordinierten Offenlegung der Schwachstelle.[2], [7], [8], [1]

Schritt-für-Schritt Angriffsablauf

Schritt 1

Ein Principal desselben Kontos ändert Agentendaten

Ein authentifizierter Principal im selben AWS-Konto muss das OpenAPI-Schema der Aktionsgruppe des Bedrock Agent ändern können, um dort einen präparierten externen Referenzwert einzufügen. Dies ist kein nicht authentifizierter Angriff aus dem Internet.[2]

Schritt 2

Ein anderer Nutzer importiert den Agenten

Ein Nutzer startet den betroffenen Importablauf des Starter Toolkits. Verwundbare Versionen verarbeiten dabei die OpenAPI-Daten der Aktionsgruppe.[1], [2]

Schritt 3

Der Parser löst einen externen Verweis auf

Version 0.3.13 übergab das Dokument an ResolvingParser, ohne die Auflösung auf interne Verweise zu begrenzen. Ein manipulierter externer Verweis konnte ausgehende Anfragen oder lokale Dateizugriffe aus der Importumgebung auslösen.[7], [2]

Schritt 4

Aktualisieren, erneut importieren und Artefakte ersetzen

Aktualisieren Sie auf 0.3.14 oder neuer, importieren Sie mit betroffenen Versionen importierte Agenten erneut und ersetzen Sie lokale sowie bereitgestellte Artefakte. Migrieren Sie nach Möglichkeit vom veralteten Starter Toolkit zu @aws/agentcore.[1], [8]

Quellcode: Verwundbar vs. Sicher

Diese Ausschnitte stammen aus den offiziellen Quelldistributionen 0.3.13 und 0.3.14. Die Korrektur weist externe $ref-Verweise vor dem Aufruf von Prance zurück und beschränkt den Resolver auf interne Verweise. Upstream-Tests prüfen die Zurückweisung vor dem Parser und erlauben interne Fragmente. Das ist ein gezielter Quellcodevergleich, kein Anfragebeispiel; aktualisieren Sie das Paket, statt die Ausschnitte zu kopieren.[7], [8], [2]

Quelltextauszug: Ausschnitte des AgentCore-Importers, Versionen 0.3.13 und 0.3.14

VERWUNDBARE IMPLEMENTIERUNG
# 0.3.13: Der Parser löst Verweise aus dem OpenAPI-Dokument auf.
parser = ResolvingParser(
    spec_string=json.dumps(action_group["apiSchema"]["payload"])
)
action_group["apiSchema"]["payload"] = parser.specification
GEHÄRTETER SICHERHEITS-PATCH
# 0.3.14: Externe Verweise vor dem Parsen ablehnen.
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}]")

Checkliste für Engineering & Systemsicherheit

Quellen