IDOR: Mass Assignment — эскалация через JSON
API-эндпоинт обновления профиля принимает все JSON-поля, включая role.
mediumpythonPro
Задача
# Mass Assignment: эскалация привилегий через JSON-API
## Сценарий
Перед вами Flask-приложение интернет-магазина SecureShop. У авторизованных пользователей есть личный кабинет, и для удобства разработчик реализовал JSON-API обновления профиля: клиент отправляет JSON с полями для изменения, сервер применяет их к записи пользователя в БД.
В реализации этого API допущена ошибка из категории **Mass Assignment** (CWE-915) — сервер автоматически переносит ключи из входного JSON в столбцы таблицы пользователей без явной фильтрации того, какие именно поля клиент вправе менять. Это значит, что вместе с легитимными полями («имя», «аватар» и т. п.) клиент может «случайно» прислать и служебные атрибуты записи — те, которые относятся к авторизации, балансу, привилегиям. Сервер послушно их применит.
В системе есть административный раздел с CTF-флагом, доступный только пользователям с административной ролью. Ваша задача — использовать Mass Assignment-уязвимость для повышения собственной роли и получения флага.
## Цели
1. Авторизуйтесь как `demo` / `demo` и изучите страницу профиля. Сделайте легитимное обновление и понаблюдайте, какие именно поля сервер принимает на этом эндпоинте.
2. Подумайте, какие ещё «служебные» поля могут существовать в записи пользователя в БД, не показываемые легитимной формой профиля.
3. Сформируйте JSON-запрос, в котором вместе с разрешёнными полями подмешаны те, которые пользователь не должен иметь возможности менять. Применив запрос, повысьте собственную роль.
4. Откройте административный раздел с CTF-флагом и заберите его.
## Данные
| Параметр | Значение |
|----------|----------|
| Обычный пользователь | `demo` / `demo` |