read.html5.qq.com 图片中转 EXIF 跨站
作者:周智@知道创宇研究团队
发布时间:2015.1.11
English:http://chichou.0ginr.com/blog/1023
---------------------------------------------------
漏洞分析
一、详细说明:
http://read.html5.qq.com/image?imageUrl=http://XXX
是为手机用户中转压缩第三方图片的服务,并使用了 HAProxy 做负载均衡。
实际测试发现,由于压缩中转没有过滤图片 EXIF 信息,导致页面内容可以被污染;而 HAProxy 存在错误配置,有相当大概率返回错误的 MIME 类型,导致浏览器将图片识别为 HTML 页面,执行恶意脚本。
二、漏洞证明:
准备一张任意内容的位图,需要图片格式支持 EXIF。
在 EXIF 任意字段中添加恶意脚本,例如:
exiftool ‘-Make=<script>alert(/xss/)</script>’ test.jpg
使用服务器发布到公网,通过修改后缀名为 htm 等方式,确保客户访问这张图片的 url 时候 Content-Type 返回 text/html。
PoC:
http://read.html5.qq.com/image?imageUrl=http://chichou.0ginr.com/wtf.htm
由于该服务使用了 HAProxy 做负载均衡,有可能返回正确的类型,也就是说存在一定概率失败。但只要刷新多次即可复现。
图为触发失败:
经过一些测试,我们发现这个服务还支持 svg (矢量图)的缓存,返回给用户的是 jpeg 位图,但依然给出了错误的 MIME 类型。这个 MIME 类型的值与原图链接服务器返回的值是一样的(即有被控制的可能性,而且相当大)。
三、修复方案:
- 图片压缩服务中抹掉原图 EXIF 信息
- 检查 HAProxy 配置,返回正确的 Content-Type
- 考虑将此类服务部署到非主站域名(类似 gtimg 什么的?)
四、漏洞状态:
该漏洞已于 2015-01-22 16:00:20 标记为已修复。
一条评论
请教个问题 exiftool 用的什么工具呢? py shell ruby