# AWS - EMR Privesc

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

## EMR

Plus d'**info sur EMR** dans :

{{#ref}}
../aws-services/aws-emr-enum.md
{{#endref}}

### `iam:PassRole`, `elasticmapreduce:RunJobFlow`

Un attaquant avec ces permissions peut **lancer un nouveau cluster EMR en attachant des rôles EC2** et essayer de voler ses identifiants.\
Notez que pour ce faire, vous devez **connaître une clé privée ssh importée dans le compte** ou en importer une, et être capable d'**ouvrir le port 22 dans le nœud maître** (vous pourriez être en mesure de le faire avec les attributs `EmrManagedMasterSecurityGroup` et/ou `ServiceAccessSecurityGroup` à l'intérieur de `--ec2-attributes`).
```bash
# Import EC2 ssh key (you will need extra permissions for this)
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""
chmod 400 /tmp/sshkey
base64 /tmp/sshkey.pub > /tmp/pub.key
aws ec2 import-key-pair \
--key-name "privesc" \
--public-key-material file:///tmp/pub.key


aws emr create-cluster \
--release-label emr-5.15.0 \
--instance-type m4.large \
--instance-count 1 \
--service-role EMR_DefaultRole \
--ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=privesc

# Wait 1min and connect via ssh to an EC2 instance of the cluster)
aws emr describe-cluster --cluster-id <id>
# In MasterPublicDnsName you can find the DNS to connect to the master instance
## You cna also get this info listing EC2 instances
```
Notez comment un **rôle EMR** est spécifié dans `--service-role` et un **rôle ec2** est spécifié dans `--ec2-attributes` à l'intérieur de `InstanceProfile`. Cependant, cette technique ne permet que de voler les identifiants de rôle EC2 (puisque vous vous connecterez via ssh) mais pas le rôle IAM EMR.

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

### `elasticmapreduce:CreateEditor`, `iam:ListRoles`, `elasticmapreduce:ListClusters`, `iam:PassRole`, `elasticmapreduce:DescribeEditor`, `elasticmapreduce:OpenEditorInConsole`

Avec ces autorisations, un attaquant peut accéder à la **console AWS**, créer un Notebook et y accéder pour voler le rôle IAM.

> [!CAUTION]
> Même si vous attachez un rôle IAM à l'instance de notebook, dans mes tests, j'ai remarqué que j'étais capable de voler des identifiants gérés par AWS et non des identifiants liés au rôle IAM.

**Impact potentiel :** Privesc au rôle géré par AWS arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile

### `elasticmapreduce:OpenEditorInConsole`

Juste avec cette autorisation, un attaquant pourra accéder au **Jupyter Notebook et voler le rôle IAM** qui lui est associé.\
L'URL du notebook est `https://<notebook-id>.emrnotebooks-prod.eu-west-1.amazonaws.com/<notebook-id>/lab/`

> [!CAUTION]
> Même si vous attachez un rôle IAM à l'instance de notebook, dans mes tests, j'ai remarqué que j'étais capable de voler des identifiants gérés par AWS et non des identifiants liés au rôle IAM.

**Impact potentiel :** Privesc au rôle géré par AWS arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile

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