网站被安全部门发了一份漏洞报告,讲的是上传一个脚本文件到了云存储,经过仔细研究发现,确实 6
{
"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 都可以,整点视频,都可以随便传
网站要整改了:泪水哦~
1
yanqiyu 3 天前 via Android
也就是说签名只保护了路径前缀,甚至文件类型 OSS 没检验反而信任用户给的 header
|
2
youloge OP 为啥这样呢? 我都配了文件类型限制 $content-type,经客服提醒:OSS 不处理真实文件类型判断的,客户端说它是图片,OSS 就认为他是图片。直传这玩意不能就给前端,会出事。
|
3
timedivision 3 天前 via iPhone
只要是 oss 上传都行吗?
|
4
youloge OP 都可以:去支付宝 阿里云 找上传公开接口,可以丢个 html 上去玩
|
![]() |
5
suhu 3 天前
常规的 oss/s3 实现管 mime-type 吗(孤陋寡闻了)
|
![]() |
6
micate 3 天前
如果你允许用户上传文件且允许上传之后的文件公开访问,理论上就可以被利用为 图床、x 床,因为用户完全可以通过修改文件后缀、分割大文件的方式来滥用上传和访问;
可以通过限制 referer 的方式避免站外引用;或者设置 bucket 为私有 + 登录后可访问(临时签名 token )的方式来实施上传、访问限制。 |
![]() |
7
my3157 3 天前
客户端直接上传就是这样,签名的时候把 Content-MD5 加进去就可以了
|
9
youloge OP @micate 差别很大!
图床:是视频前面+60 字节伪装成图片,起码你是直接不能打开的,费流量没危害 绕过:你拿个图片上传口子,可以把整个前端打包文件夹连图带脚本全部传上去传上去 连二级三级目录都能整 |
![]() |
10
coldle 3 天前 via Android
预签名上传能被恶意覆盖重传的问题确实一直存在,但敢用 starts-with 预签名还公开的确实有点搞 😂 只要前缀一样随便传,分分钟传一堆小垃圾上去
|
![]() |
11
xiaoming1992 3 天前 via Android
我的签名是同时限制尺寸、content-type 、文件完整路径(包括文件名),这么一看只有一个文件名能稍微限制一下这个问题
|
12
youloge OP @xiaoming1992 尺寸 还不是前端报给你的 只有 eq $key 有点用 但是你指定$key 123.png 其实他可以是个 mp4 文件,而且 123.png 类型的 mp4 文件丢给播放器不影响不放的,播放器取前 n 字节判断元数据的,反正 oss 随便绕
|
![]() |
13
xiaoming1992 3 天前 via Android
@youloge #12 限制文件名能限制你举例的 apk ,能防止用户意外下载到危险应用(好像也没什么危险的,现在手机安装个 apk 各种提醒各种限制,一般也不会莫名其妙安装上未知应用)。
至于你说的图片/视频问题,貌似只能通过 oss 限制跨域和#6 的方法,限制资源使用范围,来减轻影响了。 |
14
night98 3 天前
你这个本来就是上传策略写的有问题,正常应该就是写死具体上传路径比如前端请求的 abc.jpg ,你给他返回的就是只能上传到 images/2025/唯一标识-abc.jpg 这个路径,而不是通用前缀。至于他传上来的 abc.jpg 到底是图片还是视频文件本来就不重要。
|
![]() |
15
rekulas 2 天前
应该是你自己策略的漏洞
|
16
samnya 2 天前 ![]() 即使限制死了整个路径,他也可以照样上传任意的文件内容进来,只不过别人下载下来要改一下后缀而已。
所以这其实就是图种嘛,高级一点的图种而已。只要 oss 不帮你严格校验内容,所有能上传的地方都是这样的。 |
18
xyholic 2 天前
qq 群里有很多流传引流的簧色小视频就是挂在各种 oss 里的
|
![]() |
20
lyxxxh2 2 天前
content-type 验证确实没用。
之前自己站验证的 content-type,然我我 burpsite 抓下包。 改下 image/pn,php 木马就上传了。 脚本到 oss 就到呗,还整改,醉了。 传些木马到一些大站,举报他们网站有木马。 |
![]() |
21
hxndg 2 天前
我没看懂啥意思。。。。
放开让用户传递,然后还允许用户直接访问,这不是摆明了就是随便玩了吗? 我记得很早的时候上传木马也还要找地址啥的,是一个道理吧? 对 OSS 这种我估计也是业务自己校验了 |
![]() |
22
mcfog 2 天前 ![]() 正常设计收上传的桶应该是个隔离暂存的桶,传完自己 check 过没问题再挪到持久存储的正式的存储中。其他各种稀奇古怪的垃圾直接用短 TTL 全鲨了
|
![]() |
23
varrily 2 天前
[
"eq", "$key", "upload/6yKip7EGqYB.jpg" ], 前端限制文件类型选择,后端随机文件名+限定扩展名,私有桶+签名访问。 但用户把一个 apk 改成 jpg 肯定是防不住的,也没什么影响。 |
24
fdrag0n 2 天前
云上传后端不处理文件,所以理论上可以上传任何文件。
如果担心被盗刷流量可以考虑:限制外站引用+签名+限制返回 content-type 白名单+图片云端转码等方式来防止被拿去当盗版视频分片 |
26
ColoThor 2 天前
一般不是直接限制上传的完整路径吗
|
![]() |
27
009694 2 天前
我还以为是个啥 bug 。。 问题源于两点 1 不要以目录作为预授权 2 不要信任用户输入的任何内容
contenttype 就是个申明,oss 怎么可能去真给你做内容校验。 最佳用法是固定完整 key 让用户上传到某个临时位置,再在后端通过事件触发或者前端通知的方式触发校验,校验通过再转移到永久 key 。 oss 开放直传的目的是利用大带宽,不是它帮你做完了所有安全措施 |
![]() |
28
pytth 1 天前 via Android
很多不太会用对象存储的人,就容易出现上传漏洞。而且这种现象极为常见。就连大厂也常见,腾讯,阿里,360 ,字节我都见过很多这种漏洞,都被黑灰产传 html 做落地页。
|
![]() |
29
shellus 1 天前
不对啊
1. 路径是实体相关的,例如 path 中有<userid>部分,这样可以检测被利用后追究到账户 2. 签名是后端生成的,可以对请求鉴权和限流 所以我想不通被利用的点在哪,如果黑产知道你随时可以将它们连根拔除,那么它就不会来利用你的 OSS |
![]() |
30
brightguo 20 小时 46 分钟前
一般上传的地址,都是只允许在有限的时间里上传( POST 、PUT ),并且一旦上传完成就不允许覆盖。
同时该地址不允许下载( GET ),也没有对外的域名让你下载该原始文件。 也就是 bucket 属性几乎都是私有的,正常的 oss 默认配置都这样。除非你赢要改成公共读,oss 也会标红提醒你存在的流量风险。 |
![]() |
31
realpg 18 小时 20 分钟前
啊,这个漏洞爆出来了吗?哎...
某些人某些项目的成本要翻几百倍了... 这是白嫖存储的基本方法 |
![]() |
32
realpg 18 小时 16 分钟前
哦 仔细看了 是 start-with 不是我想的那个漏洞
那没事了 |
![]() |
33
IvanLi127 8 小时 50 分钟前
额,不用 OSS 不也会有这问题么?那个文件类型不是做校验用的吧。直传完成后,服务端不读出来校验下不就有这问题么?
|
![]() |
34
realpg 7 小时 52 分钟前
@brightguo #30
某个巨型几百强企业的离谱的公有云 oss 他没有静态建站功能 然后你访问他的根目录 就会 dump 出全 bucket 的文件列表给你看 xml 格式 他甚至没有静态建站功能 如果你这个 bucket 文件过多 甚至这个 dump 出来的 xml index 文件能高达数百 MB 之大 反正就是只要被人输入根目录 就几百 MB 公有云流出流量出去了 这世界多草台班子... |
35
EMMMMMMMMM 7 小时 16 分钟前 via Android
哈哈,关注一下 oss
|