21年挖的对象存储漏洞到现在结束了吗?
字数 1477 2025-08-29 08:30:19
云对象存储response-*参数漏洞分析与防御指南
一、漏洞概述
2021年发现的云对象存储response-*参数漏洞是一个影响几乎所有主流云厂商对象存储服务的安全问题。该漏洞允许攻击者通过修改对象返回的HTTP头(特别是response-content-type)来改变对象的行为方式,最严重的利用场景是可造成跨站脚本攻击(XSS)。
二、漏洞演变历程
2.1 初始阶段:匿名修改response-*
漏洞表现:
- 最初发现时,攻击者无需任何认证即可直接在URL中增加
response-*参数 - 例如:
?response-content-type=text/html可将原本是文本文件的对象以HTML格式返回 - 腾讯云文档中曾明确展示此特性(修改
response-content-type为application/octet-stream)
修复措施:
- 云厂商禁止了匿名(未签名)GET请求中使用
response-*参数 - 未签名请求包含这些参数时返回400错误
2.2 绕过方式:通过临时密钥签名response-*
利用场景:
- 业务中常见的"客户端直传"模式:服务端生成临时密钥给客户端,客户端直接上传到OSS
- 临时密钥通常限制了上传路径和content-type等
攻击方法:
- 上传一个.txt文件(Content-Type为text/plain)
- 读取时通过签名URL设置
?response-content-type=text/html - 通过CDN域名访问,文件会被浏览器解析为HTML,导致XSS
关键点:
- 攻击者可生成带有
?response-content-type=text/html签名的URL - 同样可修改
response-content-disposition参数
修复方案:
- 使用服务端签名直传而非临时密钥
- 通过policy严格限制上传参数
- 参考阿里云服务端签名直传方案
2.3 第三方服务CDN的绕过
新攻击面:
- CDN支持回源OSS并支持私有对象读取
- 通过CDN特性,无需自行签名即可修改
response-*参数
攻击示例:
- 将PDF文件转为EXE文件下载(通过修改
response-content-type)
云厂商修复:
- 禁止GET请求使用
response-content-type参数 - 仅对历史使用过该参数的bucket保持兼容(需人工申请移除白名单)
三、防御建议
1. 上传策略配置
- 通过policy严格限制content-type,禁止上传html、svg等危险类型
- 注意:即使上传时指定了content-type,仍可通过response-content-type修改
2. 权限控制
- 严格控制桶的读写权限
- 禁用不必要的列目录权限
3. 域名隔离
- 使用非业务域(非敏感域)进行CDN服务
- 通过不同域名限制潜在危害范围
4. 开发规范
- 严格遵循云厂商安全文档
- 避免参数拼接不当
- 避免以高权限(如sys_admin)挂载云存储
四、总结与展望
该漏洞经历了三次主要的攻防对抗:
- 匿名访问修复 → 临时密钥绕过
- 临时密钥修复 → CDN特性绕过
- CDN层面修复 → 历史bucket兼容性问题
由于部分业务仍依赖response-*特性,云厂商未完全禁用该功能,未来可能出现新的利用方式。安全团队应持续关注云存储安全配置,及时应用最新的安全实践。