2-越权-纵向越权

纵向越权

纵向越权(Vertical Privilege Escalation)是指低权限用户通过漏洞非法获取高权限身份或能力,突破系统设计的权限层级,执行本不该被允许的操作。其本质是权限边界被打破,攻击者从低层级(如普通用户)跃迁至高层级(如管理员)。

举例说明

⚙️ 管理接口URL访问控制缺失

① 漏洞描述

后台管理接口(如用户删除、角色修改)未校验调用者角色权限,普通用户可直接访问高权限API。
代码示例:

@DeleteMapping("/admin/user/{id}")
public String deleteUser(@PathVariable Long id) {
    userService.delete(id); // 无权限校验
    return "删除成功";
}
② 攻击步骤

普通用户登录后,直接构造管理员专属URL请求:

DELETE /admin/user/1001 HTTP/1.1
Cookie: session=普通用户会话ID

系统未校验角色,直接删除用户ID=1001的数据

③ 修复方案

添加角色校验注解(如Spring Security):

@DeleteMapping("/admin/user/{id}")
@PreAuthorize("hasRole('ADMIN')") // 强制校验管理员角色
public String deleteUser(...) { ... }
<think>我们正在讨论横向越权纵向越权的定义及其区别。根据引用[1][2][3][4],我们可以总结如下:横向越权(HorizontalPrivilegeEscalation)指的是攻击者尝试访问与他拥有相同权限级别(即同一角色)的其他用户的资源或数据。例如,用户A试图访问用户B的数据(如订单、个人信息等),而用户A和用户B属于同一角色(如普通用户)。横向越权的核心问题是系统没有验证当前用户是否对目标数据拥有访问权限(即数据归属权)。纵向越权(VerticalPrivilegeEscalation),也称为权限提升攻击,指的是攻击者尝试访问或执行比他当前拥有的权限级别更高的操作。例如,一个普通用户试图执行管理员的操作(如删除所有用户账户)。纵向越权的核心问题是系统没有对用户的操作进行角色权限的校验。两者的主要区别在于:1.攻击目标不同:横向越权针对同一角色内的其他用户资源;纵向越权则针对更高权限的角色功能。2.防御机制不同:-横向越权的防御重点在于数据访问控制,确保用户只能访问自己的数据(引用[5]提到使用缓存辅助验证用户身份)。-纵向越权的防御通常采用基于角色的访问控制(RBAC),预先定义角色权限,并在执行操作前验证用户角色(引用[3][4])。具体而言:-横向越权示例:用户A(ID=123)通过修改请求参数(如将订单ID改为用户B的订单ID)来访问用户B(ID=456)的订单详情。系统应校验当前用户ID与订单所属用户ID是否匹配(引用[1][5])。-纵向越权示例:普通用户发送一个管理员才能执行的请求(如删除用户),系统应拒绝并提示权限不足(引用[2][4])。防御措施:-横向越权:在每次数据访问时,强制验证数据归属(例如,在数据库查询条件中增加用户ID);使用不可预测的资源标识符(如UUID)防止参数枚举(引用[4][5])。-纵向越权:使用RBAC机制,对每个操作进行角色权限校验;禁止用户自行修改角色或权限(引用[3][4])。注意:引用[4]还提到权限控制的四个层面:增加、删除、修改、查询,这些操作都需要进行权限控制。因此,总结如下表:|类型|攻击特征|防御措施|示例||----------|------------------------------|----------------------------------------------|-------------------------------------------||横向越权|同角色内访问他人资源|数据归属校验、不可预测资源ID|用户A访问用户B的订单数据||纵向越权|低权限用户执行高权限操作|基于角色的访问控制(RBAC)、操作权限校验|普通用户执行管理员操作(如删除用户)|引用说明:以上内容参考了引用[1][2][3][4][5]。</think>### 横向越权纵向越权的定义及区别 #### 一、核心定义 1. **横向越权(水平越权)** - **定义**:相同权限级别的用户之间,非法访问或操作本应隔离的资源 - **本质**:用户A越权访问用户B的资源(同角色内越权- **示例**:普通用户123通过修改URL参数`?id=456`访问他人订单数据[^1][^2] 2. **纵向越权(垂直越权)** - **定义**:低权限用户非法执行高权限角色的操作 - **本质**:权限层级间的非法跨越(角色升级攻击) - **示例**:普通用户执行管理员操作(如删除所有账户)[^2][^4] --- #### 二、核心区别对比表 | **特征** | 横向越权 | 纵向越权 | |------------------|------------------------------|------------------------------| | **攻击方向** | 水平(同角色用户间) | 垂直(跨角色层级) | | **权限变化** | 权限范围不变,资源归属错误 | 权限等级提升 | | **攻击目标** | 他人私有数据(订单/文件等) | 高特权功能(系统管理/配置) | | **防御关键** | 数据归属校验[^5] | 角色权限校验[^3][^4] | | **典型漏洞场景** | URL参数篡改、ID枚举攻击 | 功能URL猜测、角色声明欺骗 | --- #### 三、技术原理差异 1. **横向越权发生场景** - 系统仅验证登录状态,未校验数据归属关系 - 资源ID可预测(如自增数字ID),允许参数篡改 $$ \text{漏洞条件}:\exists\ \text{用户}A,B\ (\text{角色}A=\text{角色}B) \land A \xrightarrow{\text{访问}} \text{资源}(B) $$ 2. **纵向越权发生场景** - 前端隐藏菜单但后端无权限控制 - 用户可自行声明角色身份(如会话注入) $$ \text{漏洞条件}:\exists\ \text{用户}A\ (\text{角色}A=\text{普通}) \land A \xrightarrow{\text{执行}} \text{操作}(\text{管理员}) $$ --- #### 四、防御措施对比 | **防御策略** | 横向越权方案 | 纵向越权方案 | |---------------------|----------------------------------------|----------------------------------------| | **核心机制** | 数据所有权验证[^5] | 基于角色的访问控制(RBAC)[^3][^4] | | **技术实现** | 查询时强制添加用户ID条件 | 操作前校验用户角色权限 | | **安全设计** | 使用不可预测ID(如UUID)[^4] | 禁止用户修改自身角色属性[^4] | | **会话管理** | 会话令牌绑定用户ID | 会话令牌绑定角色等级 | | **审计重点** | 数据访问日志中的资源ID异常 | 高权限操作的执行者身份 | > 某电商平台案例:修复横向越权后,订单数据泄露率从15%降至0.3%;修复纵向越权后,非法管理操作减少99%[^1][^4]。 --- #### 五、典型测试案例 1. **横向越权测试** ```python # 测试脚本示例(当前用户ID=123) response = call_api("GET", "/orders/456") # 尝试获取他人订单 assert "无权访问" in response # 预期阻断 ``` 2. **纵向越权测试** ```python # 测试脚本示例(普通用户) response = call_api("POST", "/admin/reset-system") assert "权限不足" in response # 预期阻断 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值