最近XSS扫描器发现了一些奇怪的漏洞,对一些特征归类,查询,发现是属于yii 1.x框架。

Yii是一个免费的,开源的,基于PHP的Web应用程序开发框架

虽然YII 已经发布了2.x,但1.x的使用量还是很大的

40a49a7466ad0491ee5ed4bed60fa587.png

复现

下载yii 1.x

git clone https://github.com/yiisoft/yii

运行自带的blog demo

bdd24dc8fae401cc4a374ef3fd2a116b.png

当请求头带有X-Requested-With: XMLHttpRequest时,并且含有yii不能识别的路径时,yii会报错,并且回显出路径,这部分也没有进行html转码。

发送如下请求体

edbf7ff5cf90261bca9acf7d3d48d1cf.png

771efdf85210498ace379e9904503a7e.png

89d4628b417cd77329c4d4755b29174c.png

代码分析

问题发生在framework/base/CErrorHandler.php

dc74c1da2174b7200148ee7a9861e2cb.png

displayException函数在framework/console/CConsoleApplication.php中被定义,直接echo输出

3c3de6b5a029b85e82e2ea14f695f45b.png

yii 2.x

vendor/yiisoft/yii2/base/Module.php,runAction方法遇到不存在的路由会抛出InvalidRouteException并将错误的路由输出

5ffa7e748f7ad1736fc94cd9f9a049ec.png

同样在vendor/yiisoft/yii2/web/ErrorAction.php内,对于处理ajax的错误响应,没有转义html代码

301a7e5e8201667bc4a8da20150447d3.png

06a2239aef8a56f07b3a0ebb28ddb317.png

理论上也存在1.x的漏洞,但是在web处理的最后

8493061747f07e3792a7166b5120dde4.png

会捕获这个异常并抛出一个新的异常,新异常控制的输出无法控制。

虽然捕获了这个异常,但是出现问题的异常依然在整个异常类中

a838509f83df5a92294be918842a6b7f.png

如果程序员在YII2框架中处理异常,将所有异常都输出,也有可能造成xss。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐