目录
米游社图片接口和域名的解读及对象存储业务的反思
前一阵子,有网友提到了一个来自阿里云对象存储域名的URL:
https://plat-sh-community-prod-upload-ugc.oss-cn-shanghai.aliyuncs.com
虽然URL的后缀是.jpg,但实际上可以上传任意文件,且据说可以支持高达5GB的文件上传。
相关来源:
经过两周的讨论分析,我已经确定了此URL的来源——米哈游的米游社图片上传接口。
解析米游社图片上传接口
米游社的上传接口为:
https://bbs-api.miyoushe.com/apihub/wapi/getUploadParams
这是一个用于预检和获取上传URL的接口,也是此次漏洞利用的核心。该接口返回的信息包括:
- expire: 30该参数表示签名的有效期。在签名过期后,无法继续使用该URL进行上传。单位未知,但推测为秒或分钟。该有效期类似于S3预授权URL,30分钟的有效期可能更为合理。
- host: "https://plat-sh-community-prod-upload-ugc.oss-cn-shanghai.aliyuncs.com"上传目标地址为阿里云OSS。
- dir: "upload/2024/10/04/XXX/"这是文件存储的目录路径,其中XXX为米游社的用户ID。可以通过访问https://www.miyoushe.com/ys/accountCenter/postList?id=获取该IDd的主页。
上传机制分析
上传操作为二进制上传,具体方式是通过HTTP PUT请求将文件的二进制数据逐块发送到指定的URL。值得注意的是,上传后的文件无法修改,因为上传的URL是通过预授权获取的。
域名分析
在对域名的分析中,最初的URL并未找到根源。有网友指出该域名与mhy有关,但米游社中使用的域名并不一致。最终确认是由不同的桶和CDN配置导致的。例如,网友提供的一个URL示例:
在米哈游展示的域名实际上为:
至于域名问题,当时最终的URL在网上流传并没有找到根源,有网友指出是mhy,但当时我去米游社看了下发现域名不一致,后来网友指出是一个桶一个CDN,测试后发现确实如此,CDN拉桶需要时间,速度不是很快,估计就千兆甚至百兆。
漏洞利用的根源
通过直接访问https://upload-bbs.miyoushe.com,可以暴露桶ID,配合相对简单的URL结构,成为了此次对象存储漏洞被利用的原因之一。
所以在网上就没看见这个域名,而为什么会被人发现就是因为直接访问 https://upload-bbs.miyoushe.com 会漏桶ID,再加上过于幼稚的URL设计,是对象存储设计的反面典型。
安全反思
此次事件是对象存储设计不合理的典型案例,尤其体现在:
- URL结构过于明显,缺乏混淆处理。
- 反向代理和CDN的设计存在不足 ,导致信息暴露。
- 虽然可能存在一定的CORS策略和防盗链,但这些措施已被证明不够有效,因用户可以直接通过URL访问资源。
唯一的技术壁垒可能在于米游社登录的逆向授权。虽然我没有进行深入逆向分析,但估计一些逆向技术可以获取上传URL并通过开发接口进行文件上传。不过,几年前的mhy签到那么多,估计现在基本还能用,我几年没碰mhy游戏了所以不知道啥情况,我估计是别人还是用了这个逆向方案来获取上传URL并开发接口进行上传的。
结论
米哈游的对象存储设计漏洞揭示了安全设计中常见的错误。要解决此问题,可能需要更换存储桶名称或重新设计URL结构,但这将带来较大的挑战。
Comments NOTHING