0x00 漏洞描述
越权漏洞(Broken Access Control)是指系统未正确限制用户的访问权限,导致用户能够访问或操作超出自身权限范围的资源。
常见于用户信息、订单管理、文件管理、后台管理等业务功能,可能造成敏感数据泄露、数据篡改或高权限操作被滥用。
核心问题:系统验证了用户是谁,却没有正确判断用户能做什么、能访问什么。
0x01 漏洞原理
正常情况下,用户访问资源时,系统不仅要验证用户是否登录,还应检查其是否具有对应的操作权限。
例如:
用户 A 只能查看自己的订单。
用户 B 只能修改自己创建的资料。
管理员才能执行用户管理操作。
如果系统只验证登录状态,却没有检查资源归属或角色权限,就可能产生越权漏洞。
以订单查询为例:
用户 A 登录系统,正常查看自己的订单。
系统根据订单编号查询对应数据。
服务端没有验证订单是否属于用户 A。
用户 A 因此可能访问其他用户的订单信息。
问题不在于订单编号是否可以修改,而在于服务端是否对目标资源进行了正确的权限校验。
0x02 常见类型
1. 水平越权
水平越权(Horizontal Privilege Escalation)是指用户访问或操作与自己权限相同的其他用户资源。
示例:
用户 A 和用户 B 都是普通用户,各自拥有独立的订单。系统在查询订单时没有校验归属关系,导致用户 A 可以查看或修改用户 B 的订单。
常见场景:
查看其他用户的个人资料。
访问其他用户的订单或文件。
修改其他用户的业务信息。
2. 垂直越权
垂直越权(Vertical Privilege Escalation)是指低权限用户执行了高权限角色才能进行的操作。
示例:
普通用户只能管理自己的账户,但系统未对后台管理接口进行权限校验,导致普通用户也能执行用户管理等管理员操作。
常见场景:
普通用户访问管理员功能。
普通用户执行用户管理操作。
低权限角色调用高权限业务接口。
3. 未授权访问
未授权访问(Unauthorized Access)是指系统未正确验证访问者身份或访问权限,导致未登录用户也能访问受保护的资源。
示例:
某个人资料接口本应要求用户登录,但服务端没有执行有效的身份验证,未登录状态下仍能获取受保护的数据。
常见场景:
未登录访问个人信息接口。
未登录查看受保护的业务数据。
无需身份验证即可调用受限功能。
4. IDOR 对象级越权
IDOR(Insecure Direct Object Reference,不安全的直接对象引用)是常见的对象级访问控制缺陷。
系统通过用户 ID、订单 ID、文件 ID 等标识定位资源,但没有验证当前用户是否有权访问该资源,就可能导致越权。
例如:系统根据订单 ID 查询订单,却没有检查订单所属用户。
需要注意:ID 可以被修改不代表一定存在越权漏洞,只有服务端未正确校验访问权限并导致越权访问时,才能认定存在问题。
0x03 漏洞产生原因
0x04 漏洞验证
越权测试应在自建环境或明确授权的系统中进行,使用测试账号和虚拟数据,避免影响真实用户。
1. 水平越权验证
准备两个权限相同的测试账号 A、B,分别创建测试数据。检查 A 是否能够访问或操作 B 创建的资源。
2. 垂直越权验证
准备普通用户和管理员测试账号,分别记录两种角色允许执行的操作。检查普通用户是否能够执行管理员专属功能。
3. 未授权访问验证
退出登录或使用未登录会话,检查原本需要身份验证的接口是否仍能返回受保护的数据或执行受限操作。
验证重点:
是否访问了不属于当前用户的资源?
是否执行了当前角色无权进行的操作?
服务端是否真正拒绝了未授权请求?
是否产生了非预期的数据读取或修改?
仅发现参数可以修改、接口可以访问,不能直接认定存在越权漏洞,必须结合权限规则和实际结果判断。
0x05 漏洞危害
实际危害取决于受影响的接口、数据范围和可执行操作,不能仅凭存在越权现象判断漏洞等级。
0x06 修复建议
服务端统一鉴权: 每次请求都验证用户身份、角色和操作权限,不能依赖前端控制。
校验资源归属: 查询、修改、删除资源时,确认当前用户是否拥有该资源或已获得明确授权。
严格区分角色: 明确普通用户、管理员等角色的权限边界,禁止低权限角色执行高权限操作。
默认拒绝访问: 未明确授权的请求应拒绝处理,避免遗漏接口形成权限缺口。
统一权限管理: 将权限校验纳入统一机制,避免不同接口重复实现时出现遗漏。
完善权限测试: 使用不同角色、不同账号覆盖查询、创建、修改、删除等操作,检查权限是否符合预期。
0x07 总结
越权漏洞的本质是访问控制不完善,主要表现为水平越权、垂直越权和未授权访问。无论接口参数如何设计,最终都应由服务端验证用户身份、角色权限和资源归属,确保用户只能访问和操作被明确授权的资源。
0x08 About 作者
仅用于技术学习和授权环境下的安全测试。