由于缺乏自动化的检测和应用程序开发人员缺乏有效的功能测试,因而访问控制缺陷很常见。
SAST 工具和 DAST工具可以检测到访问控制的缺失,但不能验证其功能是否正常。访问控制可通过手动方式检测,或在某些特定框架下通过自动化检测访问控制缺失。
一、漏洞产生的影响
● 失效的访问控制通常导致未经授权的信息泄露、修改或销毁所有数据、或在用户权限之外执行业务功能
● 技术影响是攻击者可以冒充用户、管理员或拥有特权的用户,或者创建、访问、更新或删除任何记录。
● 业务影响取决于应用程序和数据的保护需求。
二、常见的访问控制脆弱点
● 通过修改URL、内部应用程序状态或 HTML 页面绕过访问控制检查,或简单地使用自定义
● 的AP攻击工具。
● 允许将主键更改为其他用户的记录,例如查看或编辑他人的帐户特权提升。在不登录的情况下假扮用户,或以用户身份登录时充当管理员
● 元数据操作,如重放或篡改 JWT 访问控制令牌,或作以提升权限的cookie 或隐藏字段。
● CORS配置错误允许未授权的API访问
● 以未通过身份验证的用户身份强制浏览需要通过身份验证时才能看到的页面、或作为标准用户访问具有相关权限的页面、或API没有对POST、PUT和DELETE强制执行访问控制。
三、该如何防御?
服务器端控制
● 永远在服务器端进行服务控制,而不是客户端
● 权限检测应该应用到所有的层
数据权限控制
● 基于角色的访问(RBAC)
● 权限控制列表(ACL)
访问控制只有在受信服务器端代码或无服务器的 API 中有效,这样攻击者才无法修改访问控制检查或元数据。
● 除公有资源外,其他资源默认情况下拒绝访问。
● 使用一次性的访问控制机制,包括最小化CORS的使用。
● 建立访问控制模型以强制执行所有权记录,而不是接受用户创建、读取、更新或删除的任何记录。
● 域访问控制对每个应用程序都是唯一的,但业务限制要求应由域模型强制执行。
● 禁用Web服务器目录列表,并确保文件元数据(如: git) 不存在于 Web的根目录中。
● 记录失败的访问控制,并在适当的时候向管理员告警 (如: 重复故障)
● 对API和控制器的访问进行速率限制,以最大限度地降低自动化攻击工具的危害
● 当用户注销后,服务器上的JWT令牌应失效。