OSS 签名绕过上传任意文件到别人的网站

169 天前
 youloge

网站被安全部门发了一份漏洞报告,讲的是上传一个脚本文件到了云存储,经过仔细研究发现,确实 6

OSS 的签名直传签名一般涨这样

{
    "accessid": "MlLTAI5Zt...",
    "host": "https://oss-cn-shanghai.aliyuncs.com",
    "policy": "eyJleHBpcmF0aW9uIjoiM....",
    "signature": "TXKWgd+kz3Qy3bEOlZO+zPd4ZLY=",
    "expire": 1743080451,
    "callback": "ja1VybCeyJjYWxsYmFI6Im...",
}

解码一下上传策略policy

{
	"expiration": "2025-03-22T10:00:51Z",
	"conditions": [
		["starts-with", "$key", "image/2025/"],
		["content-length-range", 0, 2048],
		["in", "$content-type", ["image/png"]]
	]
}

看一眼 $key$content-type

你通过脚本 curl 啥的都行组装一个form-data表单 把一个vme50.apk塞给表单

然后你文件就传上去了,你通过对方的 url+/image/2025/vme50.apk 就能访问了

就是你找个大站,只要用 oss 直传的 你传个 html 都可以,整点视频,都可以随便传

网站要整改了:泪水哦~

5097 次点击
所在节点    云计算
41 条回复
yanqiyu
169 天前
也就是说签名只保护了路径前缀,甚至文件类型 OSS 没检验反而信任用户给的 header
youloge
169 天前
为啥这样呢? 我都配了文件类型限制 $content-type,经客服提醒:OSS 不处理真实文件类型判断的,客户端说它是图片,OSS 就认为他是图片。直传这玩意不能就给前端,会出事。
timedivision
169 天前
只要是 oss 上传都行吗?
youloge
169 天前
都可以:去支付宝 阿里云 找上传公开接口,可以丢个 html 上去玩
suhu
169 天前
常规的 oss/s3 实现管 mime-type 吗(孤陋寡闻了)
micate
169 天前
如果你允许用户上传文件且允许上传之后的文件公开访问,理论上就可以被利用为 图床、x 床,因为用户完全可以通过修改文件后缀、分割大文件的方式来滥用上传和访问;
可以通过限制 referer 的方式避免站外引用;或者设置 bucket 为私有 + 登录后可访问(临时签名 token )的方式来实施上传、访问限制。
my3157
169 天前
客户端直接上传就是这样,签名的时候把 Content-MD5 加进去就可以了
youloge
169 天前
@my3157 还不是可以随便定义,oss 好像连 Md5 都不会验证
youloge
169 天前
@micate 差别很大!
图床:是视频前面+60 字节伪装成图片,起码你是直接不能打开的,费流量没危害
绕过:你拿个图片上传口子,可以把整个前端打包文件夹连图带脚本全部传上去传上去 连二级三级目录都能整
coldle
169 天前
预签名上传能被恶意覆盖重传的问题确实一直存在,但敢用 starts-with 预签名还公开的确实有点搞 😂 只要前缀一样随便传,分分钟传一堆小垃圾上去
xiaoming1992
169 天前
我的签名是同时限制尺寸、content-type 、文件完整路径(包括文件名),这么一看只有一个文件名能稍微限制一下这个问题
youloge
169 天前
@xiaoming1992 尺寸 还不是前端报给你的 只有 eq $key 有点用 但是你指定$key 123.png 其实他可以是个 mp4 文件,而且 123.png 类型的 mp4 文件丢给播放器不影响不放的,播放器取前 n 字节判断元数据的,反正 oss 随便绕
xiaoming1992
169 天前
@youloge #12 限制文件名能限制你举例的 apk ,能防止用户意外下载到危险应用(好像也没什么危险的,现在手机安装个 apk 各种提醒各种限制,一般也不会莫名其妙安装上未知应用)。

至于你说的图片/视频问题,貌似只能通过 oss 限制跨域和#6 的方法,限制资源使用范围,来减轻影响了。
night98
169 天前
你这个本来就是上传策略写的有问题,正常应该就是写死具体上传路径比如前端请求的 abc.jpg ,你给他返回的就是只能上传到 images/2025/唯一标识-abc.jpg 这个路径,而不是通用前缀。至于他传上来的 abc.jpg 到底是图片还是视频文件本来就不重要。
rekulas
169 天前
应该是你自己策略的漏洞
samnya
169 天前
即使限制死了整个路径,他也可以照样上传任意的文件内容进来,只不过别人下载下来要改一下后缀而已。

所以这其实就是图种嘛,高级一点的图种而已。只要 oss 不帮你严格校验内容,所有能上传的地方都是这样的。
youloge
169 天前
@rekulas 跟你用什么花式策略无关!不管你写什么策略都能绕过。
xyholic
169 天前
qq 群里有很多流传引流的簧色小视频就是挂在各种 oss 里的
rekulas
169 天前
@youloge 如果是指改后缀绕过的话,确实,上传时存储不会严格校验格式
不过可以考虑添加触发器自行对格式进行校验
lyxxxh2
169 天前
content-type 验证确实没用。
之前自己站验证的 content-type,然我我 burpsite 抓下包。
改下 image/pn,php 木马就上传了。

脚本到 oss 就到呗,还整改,醉了。
传些木马到一些大站,举报他们网站有木马。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1121625

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX