一、前言
越权访问是当前Web应用中最常见的安全风险之一。
本文将介绍越权访问的原理、风险以及典型攻击场景,并为开发者提供有效的防范措施,帮助构建安全的Web应用。
二、什么是越权访问
越权访问,是指用户在不具备相应权限(或者说业务逻辑上不应该具备相应权限)的情况下访问了受限制的资源或执行了不允许的操作。
出现越权访问一般是因为Web应用系统为建立合理的权限控制机制,或者权限控制机制失效。
三、越权访问(权限控制失效)的危害
权限控制失效的直接危害体现在两个方面
- 数据泄漏: 攻击者可能通过越权访问获取敏感数据,比如获取用户个人信息、财务数据、家庭监控视频等。
- 数据被恶意篡改: 攻击者可能通过越权访问修改,比如修改账户余额。
在直接危害的基础上,还会引申出更多的间接危害,比如
- 侵犯隐私: 获取他人的个人身份信息,从而侵犯他人隐私。
- 实施诈骗: 获取他人个人信息后转卖给诈骗集团实施诈骗。
- 法律责任与声誉损害: Web应用用户的个人信息数据被攻击者非法获取后篡改,导致用户利益损,Web应用提供商也可能面临法律责任,且企业的声誉也会受损。
四、越权的分类
- 未授权: 用户未经授权就可以访问特定的对象或功能。
- 对象级别:文件、数据库记录、页面组件等。如攻击者可以不经过鉴权通过篡改URL参数或直接访问数据库记录。
- 功能级别:指用户访问未被授权的功能。 如普通用户不具备删除记录的权限, 攻击者通过技术手段绕过限制,实现了删除记录的操作
- 水平越权(越界访问): 水平越权是指用户在同一权限等级下,访问与自己相同权限但归属于其他用户的资源或数据。例如,在企业OA系统中,一名普通员工在系统中看到了其同事的薪酬单。
- 垂直越权(权限升级): 低权限用户执行高权限操作的情况,突破原有限制,进入受保护的资源和功能。例如,普通用户成功访问管理员控制面板或查看选定数据的情况。
五、越权访问的典型案例
未授权访问案例:Capital One数据泄露事件
背景:
2019年,美国大型金融服务提供商Capital One遭受了一起数据泄露事件,泄露了约1亿名美国客户和约600万名加拿大客户的个人信息,包括姓名、社会保险号、地址、信用评分等。
实现缺陷:
Capital One在其AWS云基础设施中存在配置错误。攻击者通过服务器端请求伪造(SSRF)漏洞访问到了公司的AWS元数据服务密钥。
攻击者如何实现越权访问:
泄露事件中的攻击者利用漏洞获取了AWS元数据服务密钥,并进一步访问到存储在S3存储桶中的大量敏感信息。
水平越权案例: 2016年Gitlab任意文件读取漏洞:CVE-2016-9086 Detail
背景:
2016年,代码托管平台GitLab出现了一个权限控制漏洞,该漏洞允许任意已注册用户访问到其他组织的代码库。
实现缺陷:
GitLab未对代码库访问请求进行严格的权限检查。当用户创建一个属于已有的其他组织的代码库的导出请求时,GitLab没有正确验证请求者是否具有相应的访问权限。
攻击者如何实现越权访问:
攻击者可以通过创建一个属于其他组织的代码库的导出请求,利用这个漏洞实现越权访问其他组织的代码库,获取敏感信息。
垂直越权案例:某网络教育平台管理员权限漏洞
背景: 某网络教育平台的普通用户通过垂直越权漏洞,获得了管理员权限,导致学生个人信息被查看和下载。
实现缺陷: 该平台管理员控制台URL可被普通用户直接访问,并且未实施必要的权限验证来保护数据。
攻击者如何实现越权访问: 普通用户可能会在浏览器地址栏尝试修改URL,直接访问管理员控制台。在本案例中,平台未对请求者身份进行验证,导致攻击者获得了更高权限,访问了敏感数据。
六、越权访问的防护措施
通用防护策略与原则
- 最小权限原则:为用户分配最少权限,仅提供执行任务所需的功能和数据访问权。
- 统一身份认证和授权:实现统一的身份认证和授权,以便对所有访问请求进行权限检查。
- 访问控制列表(ACL):建立访问控制列表,明确指定谁可以访问哪些资源和执行哪些操作。
- 输入校验:验证用户提供的输入,防止恶意请求的注入。
- 日志和监视:记录用户活动及访问请求,并监视潜在的越权访问行为。
- 应用程序更新和安全补丁:定期更新应用程序,库和操作系统,及时修复已知漏洞。
未授权访问防护策略
- 密钥管理:将敏感信息(如API密钥、数据库连接字符串)保存在安全的密钥管理系统中,而不是直接保存在代码或配置文件中。
- 限制访问范围:配置访问控制列表和安全组,限制对访问受限资源的IP范围。
- 数据加密:对存储和传输的数据进行加密,保护数据的机密性。
水平越权防护策略
- 访问边界限制:在服务端实施限制,阻止用户访问属于其他用户的数据,尤其是在使用用户ID等参数查询数据时。
- 随机化资源标识符:使用难以猜测的随机资源标识符,避免攻击者通过简单的参数修改获取其他用户的数据。
- 对象级访问控制:在数据访问时检查请求者是否有权使用特定的数据对象,防止进一步的越权访问。
垂直越权防护策略
- 角色权限管理:使用基于角色的访问控制系统,明确定义用户和管理员可以访问的资源和操作。
- 严格访问控制策略:对管理员界面、功能和敏感操作实行严格的访问控制策略,确保仅具有适当权限的用户可以访问。
- 二次身份验证:对敏感操作和管理员权限实行二次身份验证(例如,短信验证码、邮箱验证)。