漏洞概要
关注数(24)
关注此漏洞
漏洞标题:国际php框架slim架构上存在XXE漏洞(XXE的典型存在形式)
提交时间:2015-11-27 10:57
修复时间:2016-01-11 15:32
公开时间:2016-01-11 15:32
漏洞类型:任意文件遍历/下载
危害等级:高
自评Rank:15
漏洞状态:未联系到厂商或者厂商积极忽略
Tags标签:
无
漏洞详情
披露状态:
2015-11-27: 积极联系厂商并且等待厂商认领中,细节不对外公开
2016-01-11: 厂商已经主动忽略漏洞,细节向公众公开
简要描述:
歪果仁也没你想的那么屌。
这个漏洞简直典型到炸了,可称之为『开源应用中教科书式的XML实体注入漏洞』。
详细说明:
slimphp是一个知名的php轻框架,以其现代化的设计思路闻名。
至今用户已超过100w:
官方网站: http://www.slimframework.com/
这个漏洞存在于最新版(3.0)中。
首先用conposer安装之
看其文档: http://www.slimframework.com/docs/objects/request.html#the-request-body
获取POST数据,是利用getParsedBody方法,而这个方法对POST的处理,是按照content-type来区分和解析的:
很典型的问题,在这篇帖子里也提到过: http://zone.wooyun.org/content/19908
有时候框架会帮开发者一些他可能并不需要的『忙』,比如slimphp这里,常规的POST的content-type为application/x-www-form-urlencoded,但只要我将其修改为application/json,我就可以传入json格式的POST数据,修改为application/xml,我就可以传入XML格式的数据。
这个特性将会导致两个问题:
1.WAF绕过
2.可能存在的XXE漏洞
WAF绕过这个肯定不用说了,常规的WAF一般只检测application/x-www-form-urlencoded的数据,一旦修改数据类型则将通杀各大WAF。
XXE是本漏洞的重点。
我们看到解析body的代码:
实际上解析代码是作为回调函数写在Request类的构造方法里了。
可见这里直接调用了simplexml_load_string解析$input,造成XML实体注入漏洞。
所以,用slim framework 3.0开发的CMS,只要获取了POST数据,都将受到此XXE漏洞的影响。
漏洞证明:
编写一个最简单的demo页面,只有一个获取POST信息并输出的功能:
搭建在三个白帽里:http://520fdc0ca2c37864f.jie.sangebaimao.com/
正常请求:
触发XXE漏洞并读取/etc/passwd:
修复方案:
在slimphp2中,官方是对这块进行一定处理了:
不知为何在3.0版本中官方就无视这个问题了。
我猜可能有两个原因:
感觉前者的可能性较大。
所以解决方案也还是按照2中的方案进行。
漏洞回应
厂商回应:
未能联系到厂商或者厂商积极拒绝
漏洞Rank:15 (WooYun评价)