一次信息泄露引发的越权
字数 1296 2025-08-20 18:16:55
前端加密缺陷导致的越权漏洞分析与防御
一、漏洞背景与系统架构
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
- AES密钥:
- 权限控制不严格:
- 权限参数(如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 安全开发建议
-
认证与授权分离:
- 认证过程验证用户身份
- 授权过程应由后端完全控制
-
深度防御:
- 实施多层安全控制
- 即使一层被突破,其他层仍能提供保护
-
定期安全审计:
- 检查加密实现
- 验证权限控制逻辑
通过全面分析该漏洞案例,开发人员应认识到前端安全措施不能替代后端验证,关键安全逻辑必须在服务端实现,且加密方案的选择和实现需要谨慎对待。