Coders Conquer Security OWASP Top 10 API Series - Mass Assignment
Coders Conquer Security OWASP Top 10 API Series - Mass Assignment


大量赋值漏洞的诞生是因为许多现代框架鼓励开发者使用自动将来自客户端的输入绑定到代码变量和内部对象的函数。这样做是为了简化代码,加快操作速度。
攻击者可以使用这种方法来强制改变客户端不应该更新的对象属性。通常情况下,这将导致特定的业务问题,如用户给自己增加管理权限,而不是使网站瘫痪或窃取企业机密。攻击者还必须对对象和他们所利用的应用程序的业务逻辑之间的关系有一些了解。
然而,这一切都不能使大量分配的漏洞在聪明的恶意用户手中变得不那么危险。
在我们推出完整的指南之前,先玩玩我们的游戏化挑战,看看你的表现如何。
攻击者如何利用大规模分配漏洞?
OWASP提出的方案(我们稍作了修改),假设一个共享汽车的应用程序,包括使用大规模分配绑定到代码中对象的不同属性。这些属性包括用户可以改变的与权限有关的属性和只应由应用程序内部设置的与流程有关的属性。两者都使用大规模赋值将属性绑定到对象上。
在这种情况下,共享汽车应用允许用户更新他们的资料,这在许多面向用户的应用中是很常见的。这是用一个发送到PUT的API调用完成的,它返回以下JSON对象。
{"user_name":"SneakySnake", "age":17, "is_admin":false}
因为攻击者,即本例中的SneakySnake先生,已经弄清了属性和对象之间的关系,他可以重新发送他的原始请求,用以下字符串更新他的资料。
{"user_name":"SneakySnake","age":24,, "is_admin":true}
由于端点容易受到大规模分配的影响,它接受新的输入为有效。我们的黑客不仅在他的个人资料中增加了几年,而且还为自己分配了管理权限。
消除大规模分配的漏洞
尽管在一些框架中使用质量赋值功能可能很方便,但如果你想保持你的API安全,你应该避免这样做。相反,解析请求值,而不是将它们直接绑定到一个对象。你也可以使用一个缩小的数据传输对象,这将提供几乎与直接绑定到对象本身相同的便利,只是没有相关的风险。
作为额外的预防措施,像上面例子中的管理权限这样的敏感属性可以被拒绝,这样它们就永远不会被服务器在API调用中接受。一个更好的主意可能是默认拒绝每一个属性,然后允许特定的、非敏感的属性,你希望用户能够更新或改变。做任何这些事情都可以帮助锁定API,并从你的环境中消除大量分配的漏洞。
请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和客户免受其他安全缺陷的蹂躏。你也可以尝试一下 Secure Code Warrior 培训平台的演示,以保持你所有网络安全技能的磨练和更新。
在博客上深入了解我们最新的安全编码见解。
我们广泛的资源库旨在增强人类对安全编码技术提升的方法。
获取关于开发者驱动的安全的最新研究
我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。
Coders Conquer Security OWASP Top 10 API Series - Mass Assignment

大量赋值漏洞的诞生是因为许多现代框架鼓励开发者使用自动将来自客户端的输入绑定到代码变量和内部对象的函数。这样做是为了简化代码,加快操作速度。
攻击者可以使用这种方法来强制改变客户端不应该更新的对象属性。通常情况下,这将导致特定的业务问题,如用户给自己增加管理权限,而不是使网站瘫痪或窃取企业机密。攻击者还必须对对象和他们所利用的应用程序的业务逻辑之间的关系有一些了解。
然而,这一切都不能使大量分配的漏洞在聪明的恶意用户手中变得不那么危险。
在我们推出完整的指南之前,先玩玩我们的游戏化挑战,看看你的表现如何。
攻击者如何利用大规模分配漏洞?
OWASP提出的方案(我们稍作了修改),假设一个共享汽车的应用程序,包括使用大规模分配绑定到代码中对象的不同属性。这些属性包括用户可以改变的与权限有关的属性和只应由应用程序内部设置的与流程有关的属性。两者都使用大规模赋值将属性绑定到对象上。
在这种情况下,共享汽车应用允许用户更新他们的资料,这在许多面向用户的应用中是很常见的。这是用一个发送到PUT的API调用完成的,它返回以下JSON对象。
{"user_name":"SneakySnake", "age":17, "is_admin":false}
因为攻击者,即本例中的SneakySnake先生,已经弄清了属性和对象之间的关系,他可以重新发送他的原始请求,用以下字符串更新他的资料。
{"user_name":"SneakySnake","age":24,, "is_admin":true}
由于端点容易受到大规模分配的影响,它接受新的输入为有效。我们的黑客不仅在他的个人资料中增加了几年,而且还为自己分配了管理权限。
消除大规模分配的漏洞
尽管在一些框架中使用质量赋值功能可能很方便,但如果你想保持你的API安全,你应该避免这样做。相反,解析请求值,而不是将它们直接绑定到一个对象。你也可以使用一个缩小的数据传输对象,这将提供几乎与直接绑定到对象本身相同的便利,只是没有相关的风险。
作为额外的预防措施,像上面例子中的管理权限这样的敏感属性可以被拒绝,这样它们就永远不会被服务器在API调用中接受。一个更好的主意可能是默认拒绝每一个属性,然后允许特定的、非敏感的属性,你希望用户能够更新或改变。做任何这些事情都可以帮助锁定API,并从你的环境中消除大量分配的漏洞。
请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和客户免受其他安全缺陷的蹂躏。你也可以尝试一下 Secure Code Warrior 培训平台的演示,以保持你所有网络安全技能的磨练和更新。