Масове присвоєння

Масове присвоєння

Два зайві ключі JSON — і баланс ви задаєте самі.

Що таке Масове присвоєння?

API копіює кожне поле з тіла запиту на внутрішній об'єкт, не маючи переліку полів, які може задавати той, хто викликає. Токен чесний, а запис належить тому, хто викликає. Бракує заходу захисту на рівні полів. Ви надішлете звичайне оновлення профілю, а потім те саме оновлення з двома зайвими ключами JSON, і сервер запише обидва. Виправлення читає лише ті поля, які редагування профілю має змінювати. Перевірка власника чи перевірка ролі не закриють прогалину на рівні полів.

Що ви дізнаєтесь у Масове присвоєння

Масове присвоєння — Кроки навчання

  1. Звичайний учасник

    Perklane — роздрібний застосунок винагород: учасники заробляють бали за покупки й обмінюють їх у застосунку на подарункові картки. Боб зареєструвався як звичайний учасник під вигаданим ім'ям, щоб перевірити, як далеко може зайти звичайний обліковий запис. Його обліковий запис нічим не особливий: це звичайний учасник з токеном, що дає змогу читати й редагувати власний профіль. Боб відкриває консоль розробника, щоб побачити, що йому дає API облікових записів.

  2. Один об'єкт, два види полів

    На картці профілю Боба видно поля, які застосунок дозволяє йому редагувати, а поруч — значення, які застосунок зберігає про нього. У довіднику API показано, як застосунок читає й зберігає цей профіль.

  3. Прочитайте власний профіль Боба

    Спершу Боб звертається до ендпоінта так, як це задумано: просить API видати його власний профіль, передаючи свій токен учасника в заголовку Authorization — точно так, як це робить застосунок.

  4. Його профіль, усі поля

    Сервер повертає саме те, що має: власний профіль Боба, бо Боб звернувся по власний запис із власним токеном. Тут усе гаразд. Але структура запису заслуговує на уважний погляд.

  5. Зробіть звичайне редагування

    Спершу Боб користується функцією за призначенням: звичайним редагуванням профілю. Він перемикає запит на метод збереження й надсилає нове відображуване ім'я та аватар — два поля, які насправді пропонує форма профілю.

  6. Зміна зберігається

    Збереження вдалося. Відображуване ім'я та аватар змінилися, а решта лишилася без змін.

  7. Подивіться на зміну в його профілі

    Перш ніж іти далі, Боб робить те, що зробив би будь-який учасник після збереження: перезавантажує сторінку свого облікового запису. Сторінка читає назад усе, що збереження внесло до його запису.

  8. Додайте поля, яких форма ніколи не показує

    Той самий запит, той самий токен, той самий ендпоінт. Боб лишає в тілі відображуване ім'я та аватар і додає ще два ключі — точні назви полів, які йому видав запит на читання: баланс балів і рівень. Якщо збереження об'єднує все, що отримує, воно запише й ці поля.

  9. Баланс, якого він не заробляв

    Сервер прийняв усе. У власному профілі Боба тепер пів мільйона балів і рівень Platinum, а встановили їх лише два зайвих ключі в редагуванні профілю.

  10. Подивіться на результат у його профілі

    API відповів 200, але Боб хоче побачити результат так, як побачив би будь-який учасник. Він перезавантажує консоль власного облікового запису: сторінка прочитає назад усе, що збереження внесло до його запису.

Охоплення стандартів безпеки

OWASP API Top 10

  • API6:2019 Mass Assignment

CWE

  • CWE-915 Improperly Controlled Modification of Dynamically-Determined Object Attributes

CIS Controls

  • CIS 16 Application Software Security

NIST CSF

  • PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
  • PR.PS Platform Security