Ін'єкція

Ін'єкція

Перетворіть поле пошуку на читання всієї бази даних.

Що таке Ін'єкція?

Недовірені введені дані вклеюються в запит, який потім розбирає інтерпретатор, тож введене значення перестає бути значенням і стає частиною інструкції. Ви нарощуєте атаку на ендпоінт пошуку в каталозі трьома кроками: одинарна лапка викликає необроблену помилку SQL, що повторює запит, завжди істинна умова прибирає фільтр опублікованих позицій, а UNION SELECT дістається іншої таблиці по електронні адреси, хеші bcrypt і ролі облікових записів. Виправлення — прив'язаний параметр: база даних спершу компілює інструкцію. Крім того, необроблена помилка SQL у відповіді дає зловмисникові карту.

Що ви дізнаєтесь у Ін'єкція

Ін'єкція — Кроки навчання

  1. Звичайний обліковий запис покупця

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

  2. Єдине поле пошуку

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

  3. Звичайний пошук

    Боб починає зі звичайного пошуку, щоб побачити, як працює ендпоінт, і зрозуміти його формат. Пошук приймає параметр запиту q і повертає продукти, назви яких збігаються.

  4. Усе працює, як задумано

    Пошук поводиться саме так, як очікувалося. Три опубліковані ноутбуки, лише ті поля, які має бачити покупець.

  5. Додайте одинарну лапку

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

  6. Запит зламано

    Один зайвий символ обвалив ендпоінт, а помилка дала Бобові підтвердження, якого він чекав.

  7. Перепишіть фільтр

    Тепер Боб знає, що вираз стає частиною запиту, тому перестає ламати запит і починає ним керувати. Він складає вираз, який закриває рядок, додає завжди істинну умову й закоментовує залишок початкового запиту.

  8. Уся таблиця

    Фільтр, що обмежував пошук опублікованими продуктами, зник, і відповідь це доводить.

  9. Дістаньтеся до іншої таблиці

    Читати всі продукти погано, а читати таблиці, для яких пошук не призначений, ще гірше. Боб через UNION дописує до результатів записи з іншої таблиці. Postgres приймає лише такий UNION, у якого стовпці збігаються із запитом продуктів за кількістю й типом, тож Боб пакує електронну адресу, хеш пароля та роль кожного облікового запису в текстовий стовпець name , а два числові стовпці заповнює 0 . AND false на початку спорожнює продуктову частину, тож повертаються лише викрадені записи.

  10. Сховище облікових даних у результатах пошуку

    Повернуті записи — це зовсім не продукти.

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

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