Mass assignment (otherwise known as Autobinding in Spring MVC and ASP NET MVC, or Object injection in PHP) is a computer vulnerability where an active record pattern in a web application is abused to modify data items that the user should not normally be allowed to access such as password, granted permissions, or administrator status. Mass assignment as a vulnerability was first demonstrated in 2012 by developer Egor Homakov against Github, which used the Rails web application framework.
Many web application frameworks offer an active record and object-relational mapping features, where external data in serialization formats is automatically converted on input into internal objects and, in turn, into database record fields. If the framework's interface for that conversion is too permissive and the application designer doesn't mark specific fields as immutable, it is possible to overwrite fields that were never intended to be modified from outside (e.g. admin permissions flag).
These vulnerabilities have been found in applications written in Ruby on Rails, ASP.NET MVC, and Java Play framework.
In 2012 mass assignment on Ruby on Rails allowed bypassing of mapping restrictions and resulted in proof of concept injection of unauthorized SSH public keys into user accounts at GitHub. Further vulnerabilities in Ruby on Rails allowed creation of internal objects through a specially crafted JSON structure.
In ASP.NET Core mapping restriction can be declared using the [BindNever] attribute.
A whitelist of bindable non-sensitive fields should be used to limit the modification and creation of objects. The server should ignore any fields not whitelisted. A blacklist of non-bindable sensitive fields should also be used.