FlawOpen

flawopen.com/Teardowns/cve-2026-87913-aws-security-agent-mcp-s3-bucket-ownership

● CVE-2026-87913 · CVSS 5.1 · Mittel
Sicherheitsforschung · FlawOpen

CVE-2026-87913: AWS-MCP-S3-Datenleck

Ein vorhersehbarer Bucket konnte private Scanarchive in einem fremden Konto speichern. Aktualisieren Sie auf 0.2.0 und prüfen Sie den Eigentümer.[1], [2], [4]

💡 Einfache Erklärung (ELI5)

Stellen Sie sich einen Kurier vor, der prüft, ob ein Gebäude unter einer Adresse existiert, aber nicht, wem es gehört. Eine andere Person kann die Adresse zuerst registrieren und das Paket erhalten. S3 muss den erwarteten Eigentümer bei Prüfung und Upload bestätigen.[2], [1]

Kernkonzepte & Begriffe

MCP-Server
Lokaler Dienst mit Werkzeugen für KI-Assistenten; sie nutzen die Rechte des Serverprozesses.[3]
S3-Bucket
Amazon-S3-Container mit globalem Namen; daraus geht das besitzende AWS-Konto nicht hervor.[2], [3]
ExpectedBucketOwner
S3-Parameter, der vor der Operation die erwartete AWS-Konto-ID des Eigentümers bestätigen lässt.[2], [8], [9]
CWE-283 und CWE-341
MITRE-Schwächen für ungeprüfte Eigentümerschaft und vorhersehbare Werte; der Hinweis ordnet beide zu.[8], [9]

Framework-Zuordnungen

Ursachenanalyse

Der AWS-Security-Agent-MCP-Server leitet den Namen des Scan-Buckets aus AWS-Konto-ID und Region ab: security-agent-scans-<account-id>-<region>. Laut AWS und Maintainer prüfte die verwundbare Version nur, ob der Bucket existierte, nicht ob er dem Kundenkonto gehörte. S3-Namen sind global und Konto-IDs öffentlich. Ein Dritter, der den vorhersehbaren Namen zuerst registrierte, konnte das private hochgeladene Quellarchiv erhalten; es kann Code, Zugangsdaten und Infrastrukturzustand enthalten. Das ist eine fehlende Eigentümerprüfung für eine Cloud-Ressource und ein vorhersehbarer Name, keine Prompt-Injection im KI-Modell. Betroffen sind 0.1.0 bis 0.1.5; 0.2.0 ergänzt ExpectedBucketOwner für S3-Operationen und bricht bei fremdem Eigentümer ab. Ein Upgrade gibt einen bereits registrierten Namen nicht frei: Prüfen Sie den tatsächlichen Eigentümer und starten Sie keine Scans, wenn der Bucket einem Dritten gehört.

Der Bucket-Name beweist nicht die Eigentümerschaft

GrenzeDokumentierte BedingungMaßnahme
Betroffene Versionenawslabs.security-agent-mcp-server 0.1.0 bis 0.1.5 sind betroffen; 0.2.0 ergänzt die Eigentümerprüfung.Auf Version 0.2.0 oder höher aktualisieren und die laufende Paketversion prüfen.
Vorhersehbarer Bucket-NameDer Name des Scan-Buckets wird aus Konto-ID und Region abgeleitet; ein anderes AWS-Konto kann ihn registrieren.Einen passenden Namen als Adresse behandeln, nicht als Eigentumsnachweis.
Kontoübergreifender UploadDer verwundbare Server konnte den Bucket ohne Eigentümerprüfung anhand des Namens akzeptieren und ein privates Scan-Archiv hochladen.Vor Scan oder Upload prüfen, ob der Bucket dem erwarteten Konto gehört.
Behobene EigentumsgrenzeExpectedBucketOwner veranlasst S3, den Eigentümer sowohl bei der Prüfung als auch beim Upload abzugleichen.Aktualisieren, tatsächlichen Eigentümer prüfen und Scans bei fremdem Besitz stoppen; ein Upgrade überträgt den Bucket nicht.

Schritt-für-Schritt Angriffsablauf

Schritt 1

Ein Scan erhält Quellcode

Ein KI-Client fordert einen Scan an; der Server archiviert den Arbeitsbereich mit seiner AWS-Identität.[3], [2]

Schritt 2

Das Ziel ist vorhersehbar

Der Name leitet sich aus Konto-ID und Region ab; IDs sind öffentlich und S3-Namen global.[1], [2]

Schritt 3

Die Prüfung sieht nur die Existenz

Der Server akzeptierte den Bucket anhand des Namens, ohne das Kundeneigentum bestätigen zu lassen.[2], [1]

Schritt 4

Das Archiv kann ein anderes Konto erreichen

Registrierte ein Dritter den Namen zuerst, konnte er das private Archiv mit möglichen sensiblen Daten erhalten.[2], [1]

Quellcode: Verwundbar vs. Sicher

Der Code ist schematisch, keine wörtliche Kopie. Existenz genügt nicht: S3 muss das erwartete Eigentümerkonto bei Prüfung und Schreibvorgang vergleichen. Beziehen Sie es aus der authentifizierten AWS-Identität und brechen Sie bei Abweichungen ab. Prüfen Sie nach dem Upgrade den Eigentümer separat, denn es überträgt oder entsperrt keinen bereits registrierten Namen. AWS dokumentiert ExpectedBucketOwner für HeadBucket und PutObject: Bei einer Abweichung schlägt die Anfrage mit 403 fehl. Nutzen Sie dies als Fail-closed-Schutz, prüfen Sie Access-Denied-Fehler jedoch über einen autorisierten Eigentumsnachweis, bevor Sie auf einen fremden Bucket schließen.[2], [8], [9]

Quelltextauszug: Aus dem Advisory abgeleitetes AWS-SDK-Beispiel; kein wörtlicher Quelldiff.

VERWUNDBARE IMPLEMENTIERUNG
# Vereinfachte verwundbare Form: Der Name wird geprüft, nicht aber der Eigentümer.
s3.head_bucket(Bucket=bucket_name)
s3.put_object(
    Bucket=bucket_name,
    Key=object_key,
    Body=archive_bytes,
)
GEHÄRTETER SICHERHEITS-PATCH
# Jede Operation an das erwartete Konto des Bucket-Eigentümers binden.
expected_owner = sts.get_caller_identity()["Account"]
s3.head_bucket(
    Bucket=bucket_name,
    ExpectedBucketOwner=expected_owner,
)
s3.put_object(
    Bucket=bucket_name,
    Key=object_key,
    Body=archive_bytes,
    ExpectedBucketOwner=expected_owner,
)

Checkliste für Engineering & Systemsicherheit

Quellen