ID |
---|
WSTG-CONF-11 |
云存储服务有助于 Web 应用程序和服务在存储服务中存储和访问对象。但是,不正确的访问控制配置可能会导致敏感信息泄露、数据被篡改或未经授权的访问。
一个已知的例子是 Amazon S3 存储桶配置错误,尽管其他云存储服务也可能面临类似的风险。默认情况下,所有 S3 存储桶都是私有的,只能由明确授予访问权限的用户访问。用户可以授予对存储桶本身以及存储在该存储桶中的单个对象的公有访问权限。这可能会导致未经授权的用户能够上传新文件、修改或读取存储的文件。
首先确定用于访问存储服务中的数据的 URL,然后考虑以下测试:
您可以通过以下命令使用 curl 进行测试,并查看是否可以成功执行未经授权的操作。
要测试读取对象的能力,请执行以下操作:
curl -X GET https://<cloud-storage-service>/<object>
要测试上传文件的能力,请执行以下操作:
curl -X PUT -d 'test' 'https:///test.txt'
Amazon S3 存储桶 URL 遵循以下两种格式之一:虚拟主机样式或路径样式。
虚拟托管样式访问
https://bucket-name.s3.Region.amazonaws.com/key-name
在以下示例中,my-bucket
是存储桶名称, us-west-2
是区域, puppy.png
是键名称:
https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png
https://s3.Region.amazonaws.com/bucket-name/key-name
如上所述,在以下示例中,my-bucket
是存储桶名称, us-west-2
是区域, puppy.png
是键名称:
https://s3.us-west-2.amazonaws.com/my-bucket/puppy.jpg
对于某些区域,可以使用未指定特定于区域的终端节点的旧版全局终端节点。它的格式也是虚拟托管样式或路径样式。
https://bucket-name.s3.amazonaws.com
https://s3.amazonaws.com/bucket-name
对于黑盒测试,可以在 HTTP 消息中找到 S3 URL。以下示例显示了在 HTTP 响应中的 img
标签中发送的存储桶 URL。
...
<img src="https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png">
...
对于灰盒测试,您可以从 Amazon 的 Web 界面、文档、源代码或任何其他可用来源获取存储桶 URL。
除了使用 curl 进行测试之外,您还可以使用 AWS 命令行工具进行测试。在这种情况下,使用 s3://
协议。
以下命令列出存储桶配置公有时的所有对象。
aws s3 ls s3://<bucket-name>
以下是上传文件的命令
aws s3 cp arbitrary-file s3://bucket-name/path-to-save
此示例显示上载成功时的结果。
$ aws s3 cp test.txt s3://bucket-name/test.txt
upload: ./test.txt to s3://bucket-name/test.txt
此示例显示上传失败时的结果。
$ aws s3 cp test.txt s3://bucket-name/test.txt
upload failed: ./test2.txt to s3://bucket-name/test2.txt An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
以下是删除对象的命令
aws s3 rm s3://bucket-name/object-to-remove