苍穹の下

米游社图片接口和域名的解读及对象存储业务的反思

米游社图片接口和域名的解读及对象存储业务的反思

米游社图片接口和域名的解读及对象存储业务的反思

前一阵子,有网友提到了一个来自阿里云对象存储域名的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的接口,也是此次漏洞利用的核心。该接口返回的信息包括:

上传机制分析

上传操作为二进制上传,具体方式是通过HTTP PUT请求将文件的二进制数据逐块发送到指定的URL。值得注意的是,上传后的文件无法修改,因为上传的URL是通过预授权获取的。

域名分析

在对域名的分析中,最初的URL并未找到根源。有网友指出该域名与mhy有关,但米游社中使用的域名并不一致。最终确认是由不同的桶和CDN配置导致的。例如,网友提供的一个URL示例:

https://plat-sh-community-prod-upload-ugc.oss-cn-shanghai.aliyuncs.com/upload/2024/09/18/437001026/c2c88467d68be254cde987eb96222c0c_8789320676353527728.jpg

在米哈游展示的域名实际上为:

https://upload-bbs.miyoushe.com/upload/2024/09/18/437001026/c2c88467d68be254cde987eb96222c0c_8789320676353527728.jpg

至于域名问题,当时最终的URL在网上流传并没有找到根源,有网友指出是mhy,但当时我去米游社看了下发现域名不一致,后来网友指出是一个桶一个CDN,测试后发现确实如此,CDN拉桶需要时间,速度不是很快,估计就千兆甚至百兆。

 

漏洞利用的根源

通过直接访问https://upload-bbs.miyoushe.com,可以暴露桶ID,配合相对简单的URL结构,成为了此次对象存储漏洞被利用的原因之一。

所以在网上就没看见这个域名,而为什么会被人发现就是因为直接访问 https://upload-bbs.miyoushe.com 会漏桶ID,再加上过于幼稚的URL设计,是对象存储设计的反面典型。

安全反思

此次事件是对象存储设计不合理的典型案例,尤其体现在:

唯一的技术壁垒可能在于米游社登录的逆向授权。虽然我没有进行深入逆向分析,但估计一些逆向技术可以获取上传URL并通过开发接口进行文件上传。不过,几年前的mhy签到那么多,估计现在基本还能用,我几年没碰mhy游戏了所以不知道啥情况,我估计是别人还是用了这个逆向方案来获取上传URL并开发接口进行上传的。

结论

米哈游的对象存储设计漏洞揭示了安全设计中常见的错误。要解决此问题,可能需要更换存储桶名称或重新设计URL结构,但这将带来较大的挑战。

退出移动版