最近系统的安全渗透测试中,检测出存在垂直越权和水平越权的漏洞。确实项目的权限管理,只是限制到菜单和按钮粒度,没有细到业务代码的每个接口上。在此记录一下自己的修复思路。
一、什么是垂直/水平越权?
水平越权
何为水平越权呢?就是相同权限用户之间在未经授权的情况下,可以访问到一方的资源。比如说同是一个网站的普通用户A和B,A通过越权操作访问了B的信息。
例如用户A与用户B属于同一角色,拥有同样菜单权限,但他们拥有私人的客户数据(A私有数据,B私有数据),假如B用户获取到了某条A私人数据信息(例如数据id),通过调用同样的查询接口,成功查询了到该私人数据的详细信息,那么这种行为就叫做水平越权访问。
垂直越权
垂直越权呢,就是低权限用户实现了高权限用户的功能。比如普通用户通过越权登录到了管理员页面,实现管理员才能的操作。
例如管理员A可查看编辑系统所有人员信息,普通用户B只能查看编辑自己部门的人。但是用户B通过抓包获取了其他部门用户C的id,调用修改接口,成功把18岁的C改成了38岁。那么这种行为就叫做垂直越权访问。
二、如何防范?
由于,我接手这个漏洞时,修复时间很紧迫,所以就用了最简单粗暴的方式。
思路:
利用每个模块的查询功能,默认所见即为你可以操作。在每个接口执行前,默认查询该登陆用户的查询所有结果,再将执行的业务数据id对比查询结果,如果在其中则正常操作,如果不在其中则抛出越权结果。