Покупка песни дешевле, чем она стоит.

Disclosed: 2016-04-29 09:59:04 By 4lemon To ok
Unknown
Vulnerability Details
Итак, часть песен в приложении можно купить. Нажимая на кнопку купить, происходит запрос к серверу (обрезано, для удобства): >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. Нажимаем, "Купить". Происходит открытие платёжного гейта(запрос в бэкграунде): >https://paymentnew.ok.ru/dk?st.cmd=richPayment&st.reqId=-lqbcaRr5Rw-lvBTEc_nro7Ema4SvW7OY1hv-5Ce_LFQdsbKnrYg4HIxuoCH0UvKY35Q4ndQdhRXA_Z3x7ummPimUcD-g664F4cI5Wj7kEd-4vrFEIGUpnDZPtv3SJNA&st.timestamp=1437680542328&st.appName=0L_QtdGB0L3RjyDQndCw0YLQsNC70LggLSDQqNCw0YXQtdGA0LXQt9Cw0LTQsA**&st.appCode=90920917758231&st.currency=OK&st.appPrice=1&st.callback=true&st.srv=22 Уязвим параметр st.appPrice, его изменение в урле никак не влияет не целостность запроса (поменяем на 2): > https://paymentnew.ok.ru/dk?st.cmd=richPayment&st.reqId=-lqbcaRr5Rw-lvBTEc_nro7Ema4SvW7OY1hv-5Ce_LFQdsbKnrYg4HIxuoCH0UvKY35Q4ndQdhRXA_Z3x7ummPimUcD-g664F4cI5Wj7kEd-4vrFEIGUpnDZPtv3SJNA&st.timestamp=1437680542328&st.appName=0L_QtdGB0L3RjyDQndCw0YLQsNC70LggLSDQqNCw0YXQtdGA0LXQt9Cw0LTQsA**&st.appCode=90920917758231&st.currency=OK&st.appPrice=2&st.callback=true&st.srv=22 Жмём перейти к оплате - я оплачивал вебманями, но не думаю, что это имеет значения. Покупаем 2 Ок за 2 рубля - видим в нотификации "Вы получили 2 OK." И в итоге в разделе "Музыка" в подразделе "Мои покупки" искомая песня за 2 ОК. Что явно влияет на целостность приложения с финансовой точки зрения. Параметр st.appPrice должен: - входить в параметры которые используются для подписи запроса. - и проверяться на стороне сервера на соответствие запрошенному продукту.
Actions
View on HackerOne
Report Stats
  • Report ID: 78219
  • State: Closed
  • Substate: resolved
  • Upvotes: 3
Share this report