ok.ru · Report #78219
Покупка песни дешевле, чем она стоит.
How it was found
Итак, часть песен в приложении можно купить. Нажимая на кнопку купить, происходит запрос к серверу (обрезано, для удобства):
GET /isDownloaded;jsessionid=DZSUq1yT_UMNFNcYk5-mZ10DGJbUCoNYFHRUcNNwINHoSrDkkkf4gInosiPimoqGaysNvWs7GV7fnOMGgfsbCA.hHaqWq9PyS8b9PmEoYf_cA?tid=90920917758231
В ответ получаем:
{"title":"Ð¨Ð°Ñ ÐµÑезада","trackId":90920917758231,"price":10,"copyrightOwnerName":"Digital Project","isBought":false,"copyrightOwnerId":22,"image":null,"artist":"ÐаÑали"}
Видно что песня, ещё не куплена: "isBought":false И что цена у неё: "price":10 Настроив автоматическую замену получаемого контента (в burp это довольно легко сделать, см, скриншот) меняем цену получаемую от сервера на 1. Нажимаем, "Купить". Происходит открытие платёжного гейта(запрос в бэкграунде):
Уязвим параметр st.appPrice, его изменение в урле никак не влияет не целостность запроса (поменяем на 2):
Жмём перейти к оплате - я оплачивал вебманями, но не думаю, что это имеет значения. Покупаем 2 Ок за 2 рубля - видим в нотификации "Вы получили 2 OK." И в итоге в разделе "Музыка" в подразделе "Мои покупки" искомая песня за 2 ОК.
Что явно влияет на целостность приложения с финансовой точки зрения. Параметр st.appPrice должен:
- входить в параметры которые используются для подписи запроса.
- и проверяться на стороне сервера на соответствие запрошенному продукту.