背景
在一次应急中发现OSS由于上传文件控制不严,被黑产利用,上传可执行html文件,进行引流,诱骗等操作,导致域名被微信封禁,影响业务。以下图片为当时黑产引流页面,由此引出此次对oss文件上传问题的以下研究。
Oss文件上传漏洞危害
- 可上传html文件,用于钓鱼、引流等,最终会导致域名被微信封禁,使得业务不可用
- 存储型xss漏洞
- 若文件上传后未进行随机名,可导致静态文件被覆盖,严重可导致网站主页被覆盖或静态html加入暗链引流等,带来严重影响
相关概念介绍
阿里云Oss:阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 Content-Type:HTTP请求头,请求报文中实体头部用于指示资源的MIME类型 media type ;在响应中,Content-Type标头告诉客户端实际返回的内容的内容类型。危险的Content-Type
由于oss上传默认接收用户上传Content-Type值,且可为任意值,所以本次研究对象就是Content-Type- text/html
- */*
<html><img src=x onerror=alert(2)>html
不带/,随便一个请求头
测试代码:
<img src=x onerror=alert(1)>
- application/xml;application/xhtml+xml ;text/xml看上去人畜无害的xml,也能用来作恶。上述类型为XHTML文件类型,是更严谨更纯净的 HTML 版本。
<html xmlns="http://www.w3.org/1999/xhtml"><script type="text/javascript"> alert(1);script> html>
执行效果如下图
image/svg+xml
该类型为SVG文件格式,svg是使用 XML 来描述二维图形和绘图程序的语言。由于是基于XML解释,所以之前的XHTML的代码同样可以使用。以下为另一种标准svg代码:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns"><script>alert(1);script>svg>
MSEdge/IE浏览器特性接下来为神奇的微软系浏览器 application/postscript application/octet-stream application/javascript text/webviewhtml text/scriptlet以上标签在该浏览器都会以html格式解析文件
解决方案理想状态: 不接收前端content-type值,接口分类专用,后端设置content-type非理想状态:
- 白名单Content-Type(缺点:由于业务复杂,白名单收集不全,导致业务不可用)
- 黑名单Content-Type(缺点:由于各种类型复杂,可能存在漏网之鱼)
- 文件随机命名,可避免文件覆盖问题
- 对不信任文件设置Content-Disposition:attachment,该文件头告诉浏览器使用下载方式处理文件
到家集团安全部,愿与你共同成长