Масове завдання
Два додаткові ключі JSON, а баланс встановлюєте ви.
Що таке Масове завдання?
API копіює кожне поле в тілі запиту у внутрішній об’єкт без списку полів, які може встановити клієнт. Жетон є чесним, а запис належить абоненту. Чого не вистачає, так це контролю на рівні поля. Ви надішлете звичайне оновлення профілю, потім те саме оновлення з двома додатковими ключами JSON, і сервер записує обидва. Виправлення зчитує лише поля, які має змінити редагування профілю. Перевірка права власності або рольовий охоронець не можуть усунути розрив на рівні поля.
Що ви дізнаєтесь у Масове завдання
- Визнавати масове призначення: API прив’язує кожне поле в тілі запиту клієнта до збереженого об’єкта, тому клієнт може встановити поля, які він ніколи не повинен контролювати, додавши їх до запиту
- Відрізняйте це від порушеної авторизації на рівні об’єкта (досягнення об’єкта, який не є вашим) та підвищення привілеїв за допомогою підробки маркерів (підробка ваших власних облікових даних); тут маркер є чесним, а об’єкт правильно належить абоненту, а відсутній елемент керування – на рівні поля
- Подивіться, як законне редагування самообслуговування стає шахрайством, коли обробник записує надані клієнтом поля, які має встановлювати лише внутрішній процес, наприклад баланс балів або рівень облікового запису
- Застосуйте виправлення: замініть сліпе прив’язування всього тіла явним дозволеним списком полів, які може записати операція, і ігноруйте всі інші ключі
- Зрозумійте, чому список дозволених перевершує список блокованих, чому виправлена кінцева точка досягає успіху з 200, видаляючи незаписувані поля, і перевіряйте кожен обробник створення й оновлення для того самого сліпого зв’язування
Масове завдання — Кроки навчання
-
Рядовий член
Perklane – це додаток для роздрібних винагород: учасники заробляють бали за покупки та обмінюють їх на подарункові картки в додатку. Боб зареєструвався як звичайний учасник із одноразовою ідентифікацією, щоб побачити, як далеко може просунутися звичайний обліковий запис. Його обліковий запис не є чимось особливим: звичайне учасникське місце з маркером, який читає та редагує його власний профіль. Він відкриває консоль розробника, щоб побачити, що дає йому API облікового запису.
-
Один предмет, два види поля
Картка профілю Боба показує поля, які програма дозволяє йому редагувати, а поруч із ними значення, які програма зберігає про нього. Посилання на API показує, як програма читає та зберігає цей профіль.
-
Читати його власний профіль
Спочатку Боб викликає кінцеву точку так, як вона призначена для використання: він запитує API про свій власний профіль, переносячи свій власний маркер члена в заголовок авторизації, точно так само, як це робить програма.
-
Його профіль, кожна сфера
Сервер повертає саме те, що повинен: власний профіль Боба, оскільки він попросив власний запис із власним маркером. Тут немає нічого поганого. Але на форму платівки варто придивитися.
-
Зробіть нормальне редагування
Боб спочатку використовує цю функцію за призначенням: звичайне редагування профілю. Він перемикає запит на метод збереження та надсилає нове відображуване ім’я та аватар, два поля, які насправді пропонує форма профілю.
-
Редагування займає
Збереження спрацювало. Відображуване ім’я та аватар змінилися, а все інше залишилося на місці.
-
Перегляньте редагування в його профілі
Перш ніж просувати далі, Боб робить те, що зробив би будь-який учасник після збереження: він перезавантажує сторінку свого облікового запису. Що б збереження не написав у свій запис, сторінка читає у відповідь.
-
Додайте поля, які форма ніколи не показує
Той самий запит, той же маркер, та сама кінцева точка. Боб зберігає своє відображуване ім’я та аватар у тілі та додає ще два ключі, точні назви полів, які йому передав виклик читання: баланс балів і рівень. Якщо збереження об’єднує все, що отримує, воно також записує ці.
-
Баланс він так і не заробив
Це зайняло все це. У власному профілі Боба тепер зазначено, що він має півмільйона балів і платиновий рівень, встановлений лише двома додатковими ключами в редагуванні профілю.
-
Дивіться це в його профілі
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