Неперевірене виправлення від ШІ
Помічник сказав, що все безпечно. Це було не так.
Що таке Неперевірене виправлення від ШІ?
ШІ-помічник для коду запропонував виправлення SQL-ін'єкції — список заборонених шаблонів на регулярних виразах — і заявив, що ендпоінт тепер безпечний. Очевидний пейлоад повернув 400, тож проблему закрили. Протягом тижня варіант, розбитий коментарями, пройшов повз фільтр і витягнув усю таблицю клієнтів. Ви приймете впевнені зміни помічника, побачите обхід у «Тестері API», замінете список заборонених параметризованим запитом і доведете виправлення, повторивши точну атаку. Урок: перевіряйте виправлення безпеки атакою, а не упевненістю помічника.
Що ви дізнаєтесь у Неперевірене виправлення від ШІ
- Пояснюйте, чому впевненість ШІ-помічника в безпеці виправлення не доводить цієї безпеки
- Обґрунтовуйте, чому список заборонених не захищає запит: завжди є інше кодування шкідливих вхідних даних, якого він не передбачив
- Перевіряйте виправлення безпеки, відтворюючи атаку, яку воно має зупиняти, і переконуйтеся, що вона не проходить
- Замінюйте фільтрацію вхідних даних параметризованим запитом: значення прив'язується як дані й ніколи не розбирається як SQL
- Усвідомлюйте, що за код, прийнятий від помічника без рев'ю, усе одно відповідає розробник
Неперевірене виправлення від ШІ — Кроки навчання
-
Проблема, виявлена сканером
Статичний аналіз виявив SQL-ін'єкцію в ендпоінті пошуку клієнтів. Проблема потрапляє до черги Аліси в Jotvane — трекері задач команди.
-
Вразливий запит
Аліса відкриває файл, на який вказує сканер. Значення для пошуку потрапляє безпосередньо в SQL-рядок.
-
Де все йде не так
Значення q вклеюється в текст запиту, тож усе, що надішле клієнт, стає частиною SQL.
-
Попросіть помічника виправити
Аліса відкриває помічника й просить його виправити ін'єкцію.
-
Упевнене виправлення
Помічник читає файл і шукає наявні функції очищення вводу. Потім пропонує фільтр, що відсікає небезпечні шаблони у вхідних даних, і заявляє, що ендпоінт тепер безпечний.
-
Прийміть виправлення
Помічник Claude запропонував зміну й стверджує, що вона безпечна. Аліса читає, що саме він зробив, і приймає зміни. Фільтр потрапляє в код, а на полі ліворуч від коду нові рядки позначено фіолетовим пунктиром: їх написав Claude, людина ще не переглядала. Смуга авторства показує стан файлу: кілька рядків написав помічник, і жоден не пройшов рев'ю. Упевненість помічника — це не рев'ю і не тест.
-
Очевидний пейлоад
Аліса запускає проти ендпоінта класичну ін'єкцію. Фільтр відхиляє її з кодом 400. Схоже, усе виправлено.
-
Закрийте проблему
Очевидний пейлоад відбито, тож проблема здається закритою. Аліса записує результат у коментарі й вирішує її. Більше нічого не пробували.
-
Повз фільтр
Боб перевіряє той самий ендпоінт. Список заборонених шукає фіксовані шаблони, тому Боб розбиває шаблон вбудованими коментарями. База даних сприймає коментарі як пробіли й усе одно виконує ін'єкцію.
-
Уся таблиця
Вхідні дані, розбиті коментарями, пройшли повз фільтр, і ін'єкція повернула всю таблицю клієнтів: імена, адреси електронної пошти, телефони, дати народження. Виправлення, після якого ендпоінт став «безпечним», перевіряли лише на очевидному рядку.
Охоплення стандартів безпеки
OWASP Top 10
- A05:2025 Injection
CWE
- CWE-184 Incomplete List of Disallowed Inputs
- CWE-89 Improper Neutralization of Special Elements used in an SQL Command
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