🔑 角色伪造

Role Parameter Tampering

👤 当前用户

未登录

📖 漏洞说明

有些系统从请求参数中获取用户角色,而不是从服务端 session 获取。

攻击者可以修改请求参数,伪造成管理员角色!

🧪 角色伪造攻击

💡 以普通用户登录,然后选择伪造角色为 admin,观察是否能执行管理员操作。

🔬 漏洞代码

// ❌ 有漏洞:从请求参数获取角色
router.post('/action', (req, res) => {
  const { action, role } = req.body
  
  // 信任客户端传来的 role
  const userRole = role || currentUser.role
  
  if (hasPermission(userRole, 'manage:users')) {
    // 执行敏感操作
  }
})

// ✅ 安全:从 session 获取角色
router.post('/action', (req, res) => {
  const { action } = req.body
  
  // 忽略客户端传的 role,从 session 获取
  const userRole = currentUser.role
  
  if (hasPermission(userRole, 'manage:users')) {
    // 执行敏感操作
  }
})

🔍 请求对比

// 正常请求
POST /api/action
{ "action": "删除用户" }

// 攻击请求(伪造角色)
POST /api/action
{ "action": "删除用户", "role": "admin" }  ← 添加 role 参数