Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 730

Массовое присваивание (Mass Assignment)

ПроверилCybersecurity entrepreneur & security researcher

Что такое Массовое присваивание (Mass Assignment)?

Массовое присваивание (Mass Assignment)Уязвимость, при которой приложение слепо привязывает поля запроса от клиента к внутренним свойствам объекта, позволяя задавать те, что не должны контролироваться.


Массовое присваивание возникает, когда фреймворки (Rails, Spring, ASP.NET, NestJS, Django) автоматически отображают входящий JSON или поля формы на атрибуты модели без явного allow-list. Атакующий добавляет дополнительные свойства — isAdmin, role, balance, tenantId — которые сервер затем сохраняет. Эту ошибку трудно заметить при ревью из-за неявности привязки: единственный вызов update_attributes(params) или биндера модели скрывает тот факт, что записываемым является каждый атрибут. Она каталогизирована как CWE-915 и присутствует в OWASP API Security Top 10 (2019 A6, объединена в API3 «Broken Object Property Level Authorization» в 2023 году).

Классический инцидент — взлом GitHub в марте 2012 года Егором Хомаковым: поскольку форма SSH-ключа привязывала public_key[user_id] без белого списка, он добавил специально подготовленное поле, привязал свой ключ к аккаунту организации Rails и отправил коммит в rails/rails. GitHub выпустил исправление в течение нескольких часов, и этот эпизод побудил Rails сделать белые списки attr_accessible — позднее strong_parameters — поведением по умолчанию.

Меры защиты включают явные DTO или схемы входных данных, строгие allow-list связываемых полей, отделение внутренних атрибутов от моделей, доступных для привязки пользователем, и негативные тесты, отправляющие неожиданные ключи JSON.

flowchart TD
  A["Клиент отправляет POST с JSON<br/>{name, isAdmin:true}"] --> B[Автобиндер фреймворка]
  B --> C{Явный allow-list<br/>полей?}
  C -->|Нет — массовое присваивание| D[Все ключи записаны в модель]
  D --> E[(isAdmin=true<br/>сохранён в БД)]
  C -->|Да — DTO / strong params| F[Привязаны только разрешённые поля]
  F --> G[(Привилегированные поля проигнорированы)]

Примеры

  1. 01

    Отправка {"name":"Bob","isAdmin":true} на /api/users и получение прав администратора.

  2. 02

    Обновление заказа со скрытым полем скидки через POST, обходящее ценовую логику.

Частые вопросы

Что такое Массовое присваивание (Mass Assignment)?

Уязвимость, при которой приложение слепо привязывает поля запроса от клиента к внутренним свойствам объекта, позволяя задавать те, что не должны контролироваться. Относится к категории Уязвимости в кибербезопасности.

Что означает Массовое присваивание (Mass Assignment)?

Уязвимость, при которой приложение слепо привязывает поля запроса от клиента к внутренним свойствам объекта, позволяя задавать те, что не должны контролироваться.

Как защититься от Массовое присваивание (Mass Assignment)?

Защита от Массовое присваивание (Mass Assignment) обычно сочетает технические меры и операционные практики, как описано в определении выше.

Какие есть другие названия Массовое присваивание (Mass Assignment)?

Распространённые альтернативные названия: Уязвимость автопривязки, Object injection.

Связанные термины

См. также