批量赋值 (Mass Assignment)
批量赋值攻击是一种安全漏洞,当 Web 应用程序将用户提供的输入值自动分配给程序对象的属性或变量时,就会发生这种攻击。如果用户能够修改他们本不应具有访问权限的属性(例如用户权限或管理员标志 isAdmin),这就会成为一个安全问题。
摘要 (Summary)
方法论 (Methodology)
批量赋值漏洞在那些使用对象关系映射 (ORM) 技术或函数将用户输入映射到对象属性的 Web 应用程序中最常见。在这些程序中,属性可以被一次性更新,而不是逐个更新。许多流行的 Web 开发框架,如 Ruby on Rails、Django 和 Laravel (PHP),都提供了这种功能。
例如,假设一个 Web 应用程序使用 ORM,并且有一个具有属性 username (用户名)、email (电子邮件)、password (密码) 和 isAdmin (是否为管理员) 的用户对象。在正常情况下,用户可能能够通过表单更新自己的用户名、电子邮件和密码,然后服务器将这些值分配给用户对象。
然而,攻击者可能会尝试在传入的数据中添加一个 isAdmin 参数,如下所示:
{
"username": "attacker",
"email": "attacker@email.com",
"password": "unsafe_password",
"isAdmin": true
}
如果 Web 应用程序没有检查哪些参数允许以这种方式更新,它可能会根据用户提供的输入设置 isAdmin 属性,从而赋予攻击者管理员权限。
实验环境 (Labs)
- PentesterAcademy - Mass Assignment I
- PentesterAcademy - Mass Assignment II
- Root Me - API - Mass Assignment