Нова категорія OWASP Top 10:2025 об'єднує вразливості, що виникають, коли система неправильно поводиться в нештатній ситуації: помилка, тайм-аут, недоступний сервіс, некоректні дані, вичерпані ресурси.
1. «Відкриття при помилці» (fail-open) - перевірка, що при збої пропускає:
function isAllowed(User $user, string $action): bool
{
try {
return $this->permissionService->check($user, $action);
} catch (Throwable) {
return true; // «щоб не блокувати користувачів» - а насправді вимкнений контроль доступу
}
}
Сервіс прав недоступний - і всі отримують доступ. Правильно - закриття при помилці (fail-closed): відмова й запис у журнал.
Те саме з перевіркою підпису вебхука, ліцензії, ліміту запитів, антифроду: виняток не повинен означати «перевірку пройдено».
2. Незавершені операції й неузгоджений стан. Гроші списано, а замовлення не створено; товар зарезервовано, а оплата впала. Транзакції бази, ідемпотентні операції, компенсуючі дії й узгодження (reconciliation) - щоб помилка посередині не лишала систему в стані, який можна використати.
3. Розкриття інформації через помилки: стеки викликів, SQL-запити, шляхи файлів, внутрішні адреси в повідомленнях про помилки. Користувачу - загальне повідомлення з ідентифікатором, деталі - в журнал.
4. Непередбачені стани як вектор атаки:
- некоректні дані провокують виняток у місці, після якого пропущено перевірку;
- різні повідомлення про помилки для «користувача не існує» і «невірний пароль» - перелік облікових записів;
nullзамість об'єкта, що трактується як «немає обмежень».
5. Виснаження ресурсів: необмежені розміри запитів, файлів, масивів, глибина рекурсії, кількість повторів - атака на доступність через «легальні», але завеликі дані.
Як захищатися:
- закривати при помилці в усіх перевірках безпеки;
- обробляти винятки там, де відомо, що робити, а не ковтати їх широкими
catch (Throwable); - транзакції для операцій, що мають виконатися разом;
- обмеження на розміри, кількості, час виконання;
- тести негативних сценаріїв: що станеться, якщо сервіс прав, платіжний шлюз чи Redis недоступні, - і чи безпечний результат;
- моніторинг помилок - сплеск винятків часто означає, що хтось шукає слабке місце.