Представим, что специалистами по безопасности приложений была найдена ошибка в одном из продуктов, позволяющая изменять конечную цену товара. Известно, что внутри класса Promocode есть обращение к методу calculate_total. Выше представлена часть кода, содержащая уязвимость.
🥰 — Race Condition при применении промокода
👾 — Race Condition при добавлении товаров
❤️ — TOCTOU (Time-of-Check-Time-of-Use) при расчёте скидки
#ctf_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰6❤4👾3
В приложении допущена архитектурная уязвимость
— Промокод проверяется только на пустоту.
— Далее создаётся объект Promocode, где сразу происходит расчёт скидки.
— Между созданием объекта и присвоением его в ShoppingCart есть короткое окно (десятки мс).
— При одновременных запросах сумма может пересчитаться несколько раз.
— Блокировка (self.lock) есть, но не применяется к промокодам.
— Промокод применяется до записи в поле корзины.
— is_valid влияет только на ответ метода, но не предотвращает применение скидки.
— Синхронизировать применение промокода.
— Проверки выполнять до изменения состояния корзины.
#ctf_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1🥰1