一次信息泄露引发的越权
字数 1296 2025-08-20 18:16:55

前端加密缺陷导致的越权漏洞分析与防御

一、漏洞背景与系统架构

1.1 系统架构概述

该系统采用前后端分离架构,主要包含两个关键服务端口:

  • 3012端口:身份认证接口,以JSON格式返回token和权限参数
  • 12017端口:业务系统前端,负责用户交互和数据处理

1.2 认证流程

  1. 用户通过3012端口进行身份认证
  2. 认证成功后返回包含token和权限信息的JSON响应
  3. 前端使用JavaScript AES加密算法对JSON数据进行加密
  4. 加密后的数据存储在cookie中用于后续请求

二、漏洞成因分析

2.1 核心安全缺陷

系统存在两个关键设计缺陷:

  1. 业务系统与认证接口的独立验证:仅验证token的真实性,未检测cookie数据的完整性
  2. 不安全的前端加密实现:加密密钥和算法暴露在前端代码中

2.2 具体漏洞点

  1. 加密参数硬编码
    • AES密钥:1234567812345678
    • 偏移向量(IV):1234567812345678
  2. 权限控制不严格
    • 权限参数(如role)直接暴露在加密数据中
    • 后端未对权限参数进行二次验证

三、漏洞利用过程

3.1 信息收集阶段

  1. 通过分析前端JavaScript代码(settingService.js)发现:
    • AES加密实现细节
    • 硬编码的加密密钥和IV

3.2 漏洞验证步骤

  1. 解密现有cookie

    • 使用获取的AES密钥和IV解密cookie
    • 获得原始JSON数据,包含role等关键参数
  2. 参数篡改测试

    • 修改role参数值(1表示真,0表示假)
    • 测试全0和全1等边界值
    • 确认后端接受修改后的权限参数
  3. 其他攻击向量

    • 控制登录名参数
    • 注入JavaScript代码(如弹窗)验证XSS可能性

3.3 漏洞复测发现

虽然后端增加了验证逻辑,但前端仍然存在以下问题:

  1. AES加密过程仍然可见
  2. 通过全局搜索encrypt可快速定位加密代码(login.min.js)
  3. 密钥和IV仍然以明文形式存在

四、防御方案

4.1 前端改进措施

  1. 加密方案升级

    • 避免使用对称加密或在客户端存储密钥
    • 采用非对称加密(RSA等):
      • 前端使用公钥加密数据
      • 后端使用私钥解密
  2. 代码混淆与保护

    • 对关键JavaScript代码进行混淆
    • 避免敏感信息明文存储

4.2 后端加固方案

  1. 完整性验证

    • 对接收的所有参数进行完整性校验
    • 使用签名机制验证数据未被篡改
  2. 权限验证

    • 后端应维护独立的权限控制系统
    • 不信任前端传递的权限参数
  3. 安全设计原则

    • 实施最小权限原则
    • 关键操作需进行二次认证

五、总结与最佳实践

5.1 核心教训

  1. 永远不要信任客户端提供的数据
  2. 安全不能依赖前端实现
  3. 加密密钥必须妥善保护

5.2 安全开发建议

  1. 认证与授权分离

    • 认证过程验证用户身份
    • 授权过程应由后端完全控制
  2. 深度防御

    • 实施多层安全控制
    • 即使一层被突破,其他层仍能提供保护
  3. 定期安全审计

    • 检查加密实现
    • 验证权限控制逻辑

通过全面分析该漏洞案例,开发人员应认识到前端安全措施不能替代后端验证,关键安全逻辑必须在服务端实现,且加密方案的选择和实现需要谨慎对待。

前端加密缺陷导致的越权漏洞分析与防御 一、漏洞背景与系统架构 1.1 系统架构概述 该系统采用前后端分离架构,主要包含两个关键服务端口: 3012端口 :身份认证接口,以JSON格式返回token和权限参数 12017端口 :业务系统前端,负责用户交互和数据处理 1.2 认证流程 用户通过3012端口进行身份认证 认证成功后返回包含token和权限信息的JSON响应 前端使用JavaScript AES加密算法对JSON数据进行加密 加密后的数据存储在cookie中用于后续请求 二、漏洞成因分析 2.1 核心安全缺陷 系统存在两个关键设计缺陷: 业务系统与认证接口的独立验证 :仅验证token的真实性,未检测cookie数据的完整性 不安全的前端加密实现 :加密密钥和算法暴露在前端代码中 2.2 具体漏洞点 加密参数硬编码 : AES密钥: 1234567812345678 偏移向量(IV): 1234567812345678 权限控制不严格 : 权限参数(如role)直接暴露在加密数据中 后端未对权限参数进行二次验证 三、漏洞利用过程 3.1 信息收集阶段 通过分析前端JavaScript代码( settingService.js )发现: AES加密实现细节 硬编码的加密密钥和IV 3.2 漏洞验证步骤 解密现有cookie : 使用获取的AES密钥和IV解密cookie 获得原始JSON数据,包含 role 等关键参数 参数篡改测试 : 修改 role 参数值(1表示真,0表示假) 测试全0和全1等边界值 确认后端接受修改后的权限参数 其他攻击向量 : 控制登录名参数 注入JavaScript代码(如弹窗)验证XSS可能性 3.3 漏洞复测发现 虽然后端增加了验证逻辑,但前端仍然存在以下问题: AES加密过程仍然可见 通过全局搜索 encrypt 可快速定位加密代码( login.min.js ) 密钥和IV仍然以明文形式存在 四、防御方案 4.1 前端改进措施 加密方案升级 : 避免使用对称加密或在客户端存储密钥 采用非对称加密(RSA等): 前端使用公钥加密数据 后端使用私钥解密 代码混淆与保护 : 对关键JavaScript代码进行混淆 避免敏感信息明文存储 4.2 后端加固方案 完整性验证 : 对接收的所有参数进行完整性校验 使用签名机制验证数据未被篡改 权限验证 : 后端应维护独立的权限控制系统 不信任前端传递的权限参数 安全设计原则 : 实施最小权限原则 关键操作需进行二次认证 五、总结与最佳实践 5.1 核心教训 永远不要信任客户端提供的数据 安全不能依赖前端实现 加密密钥必须妥善保护 5.2 安全开发建议 认证与授权分离 : 认证过程验证用户身份 授权过程应由后端完全控制 深度防御 : 实施多层安全控制 即使一层被突破,其他层仍能提供保护 定期安全审计 : 检查加密实现 验证权限控制逻辑 通过全面分析该漏洞案例,开发人员应认识到前端安全措施不能替代后端验证,关键安全逻辑必须在服务端实现,且加密方案的选择和实现需要谨慎对待。