ID |
---|
WSTG-CONF-11 |
Os serviços de armazenamento na nuvem facilitam que aplicativos e serviços da web armazenem e acessem objetos. No entanto, a configuração inadequada de controle de acesso pode resultar na exposição de informações sensíveis, manipulação de dados ou acesso não autorizado.
Um exemplo conhecido é quando um bucket do Amazon S3 está mal configurado, embora outros serviços de armazenamento na nuvem também possam estar expostos a riscos semelhantes. Por padrão, todos os buckets do S3 são privados e só podem ser acessados por usuários que receberam acesso explícito. Os usuários podem conceder acesso público tanto ao próprio bucket quanto a objetos individuais armazenados nesse bucket. Isso pode permitir que um usuário não autorizado faça upload de novos arquivos, modifique ou leia arquivos armazenados.
- Avaliar se a configuração de controle de acesso para os serviços de armazenamento está correta.
Primeiro, identifique a URL para acessar os dados no serviço de armazenamento e, em seguida, considere os seguintes testes:
- ler os dados não autorizados
- fazer upload de um novo arquivo arbitrário
Você pode usar o curl para os testes com os seguintes comandos e verificar se ações não autorizadas podem ser realizadas com sucesso.
Para testar a capacidade de ler um objeto:
curl -X GET https://<servico-de-armazenamento-na-nuvem>/<objeto>
Para testar a capacidade de fazer upload de um arquivo:
curl -X PUT -d 'teste' 'https://<servico-de-armazenamento-na-nuvem>/teste.txt'
As URLs do bucket do Amazon S3 seguem um dos dois formatos, estilo de host virtual ou estilo de caminho.
- Acesso de Estilo de Host Virtual
https://bucket-name.s3.Region.amazonaws.com/key-name
No exemplo a seguir, my-bucket
é o nome do bucket, us-west-2
é a região e puppy.png
é o nome da chave:
https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png
- Acesso de Estilo de Caminho
https://s3.Region.amazonaws.com/bucket-name/key-name
Como acima, no exemplo a seguir, my-bucket
é o nome do bucket, us-west-2
é a região e puppy.png
é o nome da chave:
https://s3.us-west-2.amazonaws.com/my-bucket/puppy.jpg
Para algumas regiões, pode ser usado o endpoint global legado que não especifica um endpoint específico da região. Seu formato também é estilo de host virtual ou estilo de caminho.
- Acesso de Estilo de Host Virtual
https://bucket-name.s3.amazonaws.com
- Acesso de Estilo de Caminho
https://s3.amazonaws.com/bucket-name
Para testes de caixa-preta, as URLs do S3 podem ser encontradas nas mensagens HTTP. O exemplo a seguir mostra uma URL de bucket enviada na tag img
em uma resposta HTTP.
...
<img src="https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png">
...
Para testes de caixa cinza, você pode obter URLs de buckets a partir da interface web da Amazon, documentos, código-fonte ou qualquer outra fonte disponível.
Além dos testes com curl, você também pode testar com a ferramenta de linha de comando AWS. Nesse caso, é usado o protocolo s3://
.
O seguinte comando lista todos os objetos do bucket quando configurado como público.
aws s3 ls s3://<nome-do-bucket>
O seguinte é o comando para fazer upload de um arquivo
aws s3 cp arquivo-arbitrario s3://nome-do-bucket/caminho-para-salvar
Este exemplo mostra o resultado quando o upload foi bem-sucedido.
$ aws s3 cp teste.txt s3://nome-do-bucket/teste.txt
upload: ./teste.txt to s3://nome-do-bucket/teste.txt
Este exemplo mostra o resultado quando o upload falhou.
$ aws s3 cp teste.txt s3://nome-do-bucket/teste.txt
upload failed: ./teste2.txt to s3://nome-do-bucket/teste2.txt An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
O seguinte é o comando para remover um objeto
aws s3 rm s3://nome-do-bucket/
objeto-para-remover