Ін'єкція
Перетворіть поле пошуку на читання всієї бази даних.
Що таке Ін'єкція?
Недовірені введені дані вклеюються в запит, який потім розбирає інтерпретатор, тож введене значення перестає бути значенням і стає частиною інструкції. Ви нарощуєте атаку на ендпоінт пошуку в каталозі трьома кроками: одинарна лапка викликає необроблену помилку SQL, що повторює запит, завжди істинна умова прибирає фільтр опублікованих позицій, а UNION SELECT дістається іншої таблиці по електронні адреси, хеші bcrypt і ролі облікових записів. Виправлення — прив'язаний параметр: база даних спершу компілює інструкцію. Крім того, необроблена помилка SQL у відповіді дає зловмисникові карту.
Що ви дізнаєтесь у Ін'єкція
- Розпізнавайте SQL-ін'єкцію: параметр запиту вклеюється в SQL-запит, який потім розбирає база даних, тож введене значення може переписати запит і дістатися даних, яких ендпоінт не мав повертати
- Простежуйте, як наростає атака: від пробного запиту з одинарною лапкою, що видає помилку SQL, через завжди істинну умову, що прибирає фільтр, до UNION SELECT, який вивантажує зовсім іншу таблицю
- Усвідомлюйте, що ін'єкція не залежить від викрадених облікових даних чи відсутності автентифікації: зі звичайного, повністю автентифікованого облікового запису можна провести ін'єкцію через будь-яке введення, яке сервер обробляє як код
- Застосовуйте виправлення: використовуйте параметризовані запити або підготовлені інструкції, щоб значення прив'язувалося окремо й сприймалося як дані, замість екранування вручну чи списків небезпечних символів
- Не допускайте, щоб клієнтські програми отримували необроблені помилки SQL, і перевіряйте кожен ендпоінт, що будує запит, команду чи шаблон із введених даних, на таке саме вклеювання
Ін'єкція — Кроки навчання
-
Звичайний обліковий запис покупця
Wexlar керує оптовим маркетплейсом і видає облікові записи покупців із самообслуговуванням кожному, хто зареєструється. Боб оформив такий обліковий запис із вигаданими даними. Це звичайний покупець: може переглядати каталог і робити замовлення, жодних привілеїв. Він відкриває консоль розробника, щоб подивитися, що це за обліковий запис і що пропонує API.
-
Єдине поле пошуку
В обліковому записі Боба немає нічого привілейованого, тож адміністративних функцій, до яких можна дістатися, теж немає. Його цікавить лише одне поле вводу — пошук у каталозі: воно приймає все, що Боб введе, і шукає збіг за назвою в базі даних продуктів.
-
Звичайний пошук
Боб починає зі звичайного пошуку, щоб побачити, як працює ендпоінт, і зрозуміти його формат. Пошук приймає параметр запиту q і повертає продукти, назви яких збігаються.
-
Усе працює, як задумано
Пошук поводиться саме так, як очікувалося. Три опубліковані ноутбуки, лише ті поля, які має бачити покупець.
-
Додайте одинарну лапку
Найстаріший пробний запит на ін'єкцію: Боб дописує до пошукового виразу одинарну лапку. Якщо сервер шукає цей вираз як значення, пошук назви з лапкою просто нічого не поверне. Якщо ж вираз вклеюється в SQL, зайва лапка зламає запит.
-
Запит зламано
Один зайвий символ обвалив ендпоінт, а помилка дала Бобові підтвердження, якого він чекав.
-
Перепишіть фільтр
Тепер Боб знає, що вираз стає частиною запиту, тому перестає ламати запит і починає ним керувати. Він складає вираз, який закриває рядок, додає завжди істинну умову й закоментовує залишок початкового запиту.
-
Уся таблиця
Фільтр, що обмежував пошук опублікованими продуктами, зник, і відповідь це доводить.
-
Дістаньтеся до іншої таблиці
Читати всі продукти погано, а читати таблиці, для яких пошук не призначений, ще гірше. Боб через UNION дописує до результатів записи з іншої таблиці. Postgres приймає лише такий UNION, у якого стовпці збігаються із запитом продуктів за кількістю й типом, тож Боб пакує електронну адресу, хеш пароля та роль кожного облікового запису в текстовий стовпець name , а два числові стовпці заповнює 0 . AND false на початку спорожнює продуктову частину, тож повертаються лише викрадені записи.
-
Сховище облікових даних у результатах пошуку
Повернуті записи — це зовсім не продукти.
Охоплення стандартів безпеки
OWASP API Top 10
- API8:2019 Injection
CWE
- CWE-74 Improper Neutralization of Special Elements in Output ('Injection')
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