代码审计——垂直越权详解

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓

    • 01 漏洞描述
    • 02 审计要点
    • 03 漏洞特征
    • 04 漏洞案例
    • 05 修复方案

01 漏洞描述


垂直越权,也称权限提升,是一种“基于URL的访问控制”设计缺陷引起的漏洞。

由于Web应用程序没有做权限控制或者仅在菜单上做了权限控制,导致的恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升目的。

代码审计——垂直越权详解_第1张图片



02 审计要点


垂直越权漏洞发生的根本原因是系统没有设置完善的权限控制机制,因此审计的重点在于 功能点是否设置了权限控制机制。


03 漏洞特征

垂直越权是一种URL的访问控制设计缺陷引起的漏洞,由于未对URL设定严格的用户访问控制策略,导致普通用户也可以通过发送请求的方式访问本应仅高权限用户才可访问的页面。

Java

@RequestMapping(value = "delete")
public String delete(HttpServletRequest request, @RequestParam Long id)
			throws Exception {
		try {
			userManager.delete(id);
			request.setAttribute("msg", "删除用户成功");
		} catch (ServiceException e) {
			// logger.error(e.getMessage(), e);
			request.setAttribute("msg", "删除用户失败");
		}
		return list(request);

上述代码是一段管理员删除用户操作的代码,若在操作时未对访问请求者的权限做判断,那么攻击者就可以构造请求“http://xxx.xxx.xxx/user/delete?id=1”来做只有管理员才有权限干的事情。

04 漏洞案例

代码审计——垂直越权详解_第2张图片
代码层面观察对功能的判断是否存在校验机制或安全框架,若未存在明显校验代码,则存在垂直越权风险。

以下为3例垂直越权的功能点示例:

案例1:

登录到超级管理员用户,执行添加用户的操作,并且对过程进行抓包

代码审计——垂直越权详解_第3张图片
切换到普通的管理员用户,并没有添加用户的权限,将其cookie替换到先前抓取的添加用户请求的cookie

代码审计——垂直越权详解_第4张图片
发现新建了一个相同的用户,此为垂直越权

代码审计——垂直越权详解_第5张图片


**案例2:**

使用高权限用户访问,可以获取所有用户的信息的权限
代码审计——垂直越权详解_第6张图片

切换到普通用户,并没有查询所有用户的权限,将其cookie替换到先前抓取的请求包

代码审计——垂直越权详解_第7张图片
发现成功查询所有用户信息,此为垂直越权

代码审计——垂直越权详解_第8张图片

案例3:

某站点后台仅使用js跳转来限制未授权的用户访问

代码审计——垂直越权详解_第9张图片

去掉js可以成功访问后台,且可以进行操作

代码审计——垂直越权详解_第10张图片


05 修复方案


建议进行关键业务的操作时,应校验用户的会话然后根据会话获取对应的字段进行业务操作,切记不可以不校验会话的情况下允许用户操作关键性业务功能。

你可能感兴趣的:(代码审计,网络,安全,Web安全)