AWS - EFS Enum
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
EFS
Informations de base
Amazon Elastic File System (EFS) est prĂ©sentĂ© comme un systĂšme de fichiers rĂ©seau entiĂšrement gĂ©rĂ©, Ă©volutif et Ă©lastique par AWS. Le service facilite la crĂ©ation et la configuration de systĂšmes de fichiers qui peuvent ĂȘtre accessibles simultanĂ©ment par plusieurs instances EC2 et dâautres services AWS. Les principales caractĂ©ristiques dâEFS incluent sa capacitĂ© Ă Ă©voluer automatiquement sans intervention manuelle, Ă fournir un accĂšs Ă faible latence, Ă prendre en charge des charges de travail Ă haut dĂ©bit, Ă garantir la durabilitĂ© des donnĂ©es et Ă sâintĂ©grer parfaitement Ă divers mĂ©canismes de sĂ©curitĂ© AWS.
Par défaut, le dossier EFS à monter sera / mais il pourrait avoir un nom différent.
AccÚs réseau
Un EFS est créé dans un VPC et serait par dĂ©faut accessible dans tous les sous-rĂ©seaux VPC. Cependant, lâEFS aura un groupe de sĂ©curitĂ©. Afin de donner accĂšs Ă un EC2 (ou tout autre service AWS) pour monter lâEFS, il est nĂ©cessaire de permettre dans le groupe de sĂ©curitĂ© EFS une rĂšgle NFS entrante (port 2049) en provenance du groupe de sĂ©curitĂ© EC2.
Sans cela, vous ne pourrez pas contacter le service NFS.
Pour plus dâinformations sur la façon de procĂ©der, consultez : https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount
ĂnumĂ©ration
# Get filesystems and access policies (if any)
aws efs describe-file-systems
aws efs describe-file-system-policy --file-system-id <id>
# Get subnetworks and IP addresses where you can find the file system
aws efs describe-mount-targets --file-system-id <id>
aws efs describe-mount-target-security-groups --mount-target-id <id>
aws ec2 describe-security-groups --group-ids <sg_id>
# Get other access points
aws efs describe-access-points
# Get replication configurations
aws efs describe-replication-configurations
# Search for NFS in EC2 networks
sudo nmap -T4 -Pn -p 2049 --open 10.10.10.0/20 # or /16 to be sure
Caution
Il se peut que le point de montage EFS soit dans le mĂȘme VPC mais dans un sous-rĂ©seau diffĂ©rent. Si vous voulez ĂȘtre sĂ»r de trouver tous les points EFS, il serait prĂ©fĂ©rable de scanner le masque de sous-rĂ©seau
/16.
Mount EFS
sudo mkdir /efs
## Mount found
sudo apt install nfs-common
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport <IP>:/ /efs
## Mount with efs type
## You need to have installed the package amazon-efs-utils
sudo yum install amazon-efs-utils # If centos
sudo apt-get install amazon-efs-utils # If ubuntu
sudo mount -t efs <file-system-id/EFS DNS name>:/ /efs/
IAM Access
Par dĂ©faut, toute personne ayant un accĂšs rĂ©seau Ă lâEFS pourra le monter, le lire et y Ă©crire mĂȘme en tant quâutilisateur root. Cependant, des politiques de systĂšme de fichiers pourraient ĂȘtre en place nâautorisant que les principaux avec des autorisations spĂ©cifiques Ă y accĂ©der.
Par exemple, cette politique de systĂšme de fichiers ne permettra mĂȘme pas de monter le systĂšme de fichiers si vous nâavez pas lâautorisation IAM :
{
"Version": "2012-10-17",
"Id": "efs-policy-wizard-2ca2ba76-5d83-40be-8557-8f6c19eaa797",
"Statement": [
{
"Sid": "efs-statement-e7f4b04c-ad75-4a7f-a316-4e5d12f0dbf5",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "",
"Resource": "arn:aws:elasticfilesystem:us-east-1:318142138553:file-system/fs-0ab66ad201b58a018",
"Condition": {
"Bool": {
"elasticfilesystem:AccessedViaMountTarget": "true"
}
}
}
]
}
Ou cela empĂȘchera lâaccĂšs anonyme :
.png)
Notez que pour monter des systĂšmes de fichiers protĂ©gĂ©s par IAM, vous DEVEZ utiliser le type âefsâ dans la commande de montage :
sudo mkdir /efs
sudo mount -t efs -o tls,iam <file-system-id/EFS DNS name>:/ /efs/
# To use a different pforile from ~/.aws/credentials
# You can use: -o tls,iam,awsprofile=namedprofile
Points dâaccĂšs
Les points dâaccĂšs sont des points dâentrĂ©e spĂ©cifiques Ă lâapplication dans un systĂšme de fichiers EFS qui facilitent la gestion de lâaccĂšs des applications aux ensembles de donnĂ©es partagĂ©s.
Lorsque vous crĂ©ez un point dâaccĂšs, vous pouvez spĂ©cifier le propriĂ©taire et les permissions POSIX pour les fichiers et rĂ©pertoires créés via le point dâaccĂšs. Vous pouvez Ă©galement dĂ©finir un rĂ©pertoire racine personnalisĂ© pour le point dâaccĂšs, soit en spĂ©cifiant un rĂ©pertoire existant, soit en en crĂ©ant un nouveau avec les permissions souhaitĂ©es. Cela vous permet de contrĂŽler lâaccĂšs Ă votre systĂšme de fichiers EFS sur une base par application ou par utilisateur, facilitant ainsi la gestion et la sĂ©curisation de vos donnĂ©es de fichiers partagĂ©es.
Vous pouvez monter le systĂšme de fichiers Ă partir dâun point dâaccĂšs avec quelque chose comme :
# Use IAM if you need to use iam permissions
sudo mount -t efs -o tls,[iam],accesspoint=<access-point-id> \
<file-system-id/EFS DNS> /efs/
Warning
Notez quâen essayant de monter un point dâaccĂšs, vous devez toujours ĂȘtre en mesure de contacter le service NFS via le rĂ©seau, et si lâEFS a une politique de systĂšme de fichiers, vous avez besoin de suffisantes autorisations IAM pour le monter.
Les points dâaccĂšs peuvent ĂȘtre utilisĂ©s pour les objectifs suivants :
- Simplifier la gestion des autorisations : En dĂ©finissant un utilisateur et un groupe POSIX pour chaque point dâaccĂšs, vous pouvez facilement gĂ©rer les autorisations dâaccĂšs pour diffĂ©rentes applications ou utilisateurs sans modifier les autorisations du systĂšme de fichiers sous-jacent.
- Imposer un rĂ©pertoire racine : Les points dâaccĂšs peuvent restreindre lâaccĂšs Ă un rĂ©pertoire spĂ©cifique au sein du systĂšme de fichiers EFS, garantissant que chaque application ou utilisateur opĂšre dans son dossier dĂ©signĂ©. Cela aide Ă prĂ©venir lâexposition ou la modification accidentelle des donnĂ©es.
- AccĂšs au systĂšme de fichiers plus facile : Les points dâaccĂšs peuvent ĂȘtre associĂ©s Ă une fonction AWS Lambda ou Ă une tĂąche AWS Fargate, simplifiant lâaccĂšs au systĂšme de fichiers pour les applications sans serveur et conteneurisĂ©es.
Adresse IP EFS
En utilisant les informations relatives Ă lâadresse IP EFS, le script Python suivant peut aider Ă rĂ©cupĂ©rer des dĂ©tails sur le systĂšme EFS. Ces informations sont utiles pour construire la commande de montage du systĂšme ou effectuer une Ă©numĂ©ration supplĂ©mentaire avec la connaissance de lâID de sous-rĂ©seau. De plus, le script montre les points dâaccĂšs, qui peuvent ĂȘtre prĂ©cieux lorsque le rĂ©pertoire racine ou le chemin de montage principal est restreint. Dans de tels cas, les points dâaccĂšs fournissent des chemins alternatifs pour accĂ©der Ă des informations sensibles.
Usage: python efs_ip_enum.py <IP_ADDRESS>
import boto3
import sys
def get_efs_info(ip_address):
try:
session = boto3.Session(profile_name="profile")
ec2_client = session.client('ec2')
efs_client = session.client('efs')
print(f"[*] Enumerating EFS information for IP address: {ip_address}\n")
try:
response = ec2_client.describe_network_interfaces(Filters=[
{'Name': 'addresses.private-ip-address', 'Values': [ip_address]}
])
if not response['NetworkInterfaces']:
print(f"[!] No network interface found for IP address {ip_address}")
return
network_interface = response['NetworkInterfaces'][0]
network_interface_id = network_interface['NetworkInterfaceId']
print(f"[+] Found network interface: {network_interface_id}\n")
except Exception as e:
print(f"[!] Error retrieving network interface: {str(e)}")
return
try:
efs_response = efs_client.describe_file_systems()
file_systems = efs_response['FileSystems']
except Exception as e:
print(f"[!] Error retrieving EFS file systems: {str(e)}")
return
for fs in file_systems:
fs_id = fs['FileSystemId']
try:
mount_targets = efs_client.describe_mount_targets(FileSystemId=fs_id)['MountTargets']
for mt in mount_targets:
if mt['NetworkInterfaceId'] == network_interface_id:
try:
policy = efs_client.describe_file_system_policy(FileSystemId=fs_id).get('Policy', 'No policy attached')
except Exception as e:
policy = f"Error retrieving policy: {str(e)}"
print("[+] Found matching EFS File System:\n")
print(f" FileSystemId: {fs_id}")
print(f" MountTargetId: {mt['MountTargetId']}")
print(f" DNSName: {fs_id}.efs.{session.region_name}.amazonaws.com")
print(f" LifeCycleState: {mt['LifeCycleState']}")
print(f" SubnetId: {mt['SubnetId']}")
print(f" SecurityGroups: {', '.join(mt.get('SecurityGroups', [])) if mt.get('SecurityGroups') else 'None'}")
print(f" Policy: {policy}\n")
try:
access_points = efs_client.describe_access_points(FileSystemId=fs_id)['AccessPoints']
if access_points:
print(f"[+] Access Points for FileSystemId {fs_id}:")
for ap in access_points:
print(f" AccessPointId: {ap['AccessPointId']}")
print(f" Name: {ap.get('Name', 'N/A')}")
print(f" OwnerId: {ap['OwnerId']}")
posix_user = ap.get('PosixUser', {})
print(f" PosixUser: UID={posix_user.get('Uid', 'N/A')}, GID={posix_user.get('Gid', 'N/A')}")
root_dir = ap.get('RootDirectory', {})
print(f" RootDirectory: Path={root_dir.get('Path', 'N/A')}")
creation_info = root_dir.get('CreationInfo', {})
print(f" CreationInfo: OwnerUID={creation_info.get('OwnerUid', 'N/A')}, OwnerGID={creation_info.get('OwnerGid', 'N/A')}, Permissions={creation_info.get('Permissions', 'N/A')}\n")
else:
print(f"[!] No Access Points found for FileSystemId {fs_id}\n")
except Exception as e:
print(f"[!] Error retrieving access points for FileSystemId {fs_id}: {str(e)}\n")
except Exception as e:
print(f"[!] Error processing file system {fs_id}: {str(e)}\n")
except Exception as e:
print(f"[!] General Error: {str(e)}\n")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python efs_enum.py <IP_ADDRESS>")
sys.exit(1)
ip_address = sys.argv[1]
get_efs_info(ip_address)
Privesc
Post Exploitation
Persistence
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

