YS web socket存在横向越权漏洞,当前用户可任意查看其他用户的报警信息,可导致敏感信息泄漏【高】
问题描述:
YS使用定时轮询web socket的方式获取用户设备的报警信息(比如报警图片),在客户端向服务器发送轮询请求期间,若发生设备报警,则将报警信息将实时推送到客户端进行显示,但在此过程中,要查询的设备是通过和用户名绑定的,也就是说绑定指定的用户名,服务器就返回该用户对应的设备的报警信息,而不是当前登录用户的报警信息。
测试步骤:
1、 打开burp拦截代理,并启动http请求拦截功能。
2、 使用正常帐户登录YS(假设当前登录用户名为ouyy),并拦截如下web socket请求,将当前登录账户用户名改成其它某个存在的用户的用户名,如图所示:
3、 取消burp的http拦截功能,客户端将定时向服务器发送轮询请求,此时去触发hikwpf这个账户对应的设备进行报警,可以捕获到其报警信息,如图所示:
4、 在返回的信息中可以看到报警图片的URL,在浏览器地址栏中输入该URL,就可以看到hikwpf用户的设备的报警图片,如图所示:
备注:如果用户开启了安全模式,那么通过该URL访问的图像就是加密的,因此无法查看图像的内容。
问题扩展:
从目前情况来看,webSocket模块和web后台是完全独立的,即webSocket不记录用户登录后session的状态,也就是说获取web socket session的请求和发送轮询的请求是不需要带上用户登录后的cookie的,因此,验证该问题实际上是不需要一个能合法登录的账户的。
解决建议:
1、 webSocket模块与web后台向结合,发送轮询请求时要携带当前登录用户认证后的cookie,通过cookie来控制报警信息应该发给谁。
总结:进入到物联网行业,保护用户隐私是非常重要的,而如何去保护用户隐私需要思考很多,此例子就是一个造成用户隐私泄露的典型例子。