逻辑漏洞--越权漏洞

逻辑漏洞–越权漏洞

0x00 漏洞描述

越权访问(Broken Access Control,BAC),指应用在检查授权时存在漏洞,使得攻击者在获得低权限用户账号后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限的用户。
越权的成因是因为开发人员在对数据进行增删查改时,对客户端请求的数据过分相信而遗漏了权限的判定,权限验证不当而导致的越权行为。

0x01 漏洞分类

水平越权
水平越权是指攻击者尝试访问与他具有相同权限的用户资源。
比如,用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的行为就叫做水平越权访问。
以下是常出现的水平越权的几种场景:

  • 基于用户身份ID
    在使用某个功能时,通过用户提交的身份ID(用户ID、账号、手机号、证件号等用户唯一标识)来访问或操作对应的数据。
  • 基于对象ID
    在使用某个功能时,通过用户提交的对象ID(如订单号、记录号)来访问或操作对应的数据。
  • 基于文件名
    在使用某个功能时,通过文件名直接访问文件,最常见于用户上传文件的场景。

垂直越权
垂直越权是指低权限用户尝试访问高权限用户的资源。
由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
主要有以下两种场景:

  1. 未认证账号,访问无需认证后能访问该功能
  2. 不具备某个功能权限的账户,认证后能成功访问该功能

权限框架缺陷
权限控制框架是实现权限控制功能的基础(例如shiro),如果权限控制框架本身存在缺陷,那么就会导致权限控制功能完全失效。

0x02 漏洞产生的原因

通常情况下,一个 Web 程序功能流程是登录 - 提交请求 - 验证权限 - 数据库查询 - 返回结果。如果验证权限不足,便会导致越权。常见的程序都会认为通过登录后即可验证用户的身份,从而不会做下一步验证,最后导致越权。

  1. 隐藏URL
  2. 直接对象引用
  3. 多阶段功能
  4. 静态文件
  5. 平台配置错误

0x03 防范措施

  1. 采用成熟的权限管理框架(如spring security)
  2. 验证用户是否具有操作数据的权限
  3. 用户进行访问操作的凭证(如用户ID、产品号码、订单流水号等)优先采用在服务端关联session或加密后放在session中的方式获取
  4. 应对用户凭证(如用户ID、产品号码、订单流水号等)采用难以猜测的构造方式(如随机数)或采用复杂的加密算法加密后再提交
  5. 对管理功能模块进行严格的权限验证

0x04 参考链接

  1. https://www.freebuf.com/sectool/188068.html
  2. https://zhuanlan.zhihu.com/p/130919069

你可能感兴趣的:(web安全,安全)