Wallapop ES 48,5M$ Revenue или же почему надо фильтровать WebSocket запросы

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Долго думал где же опубликовать эту тему, вроде бы это и уязвимость в web, но по больше части это фишинг, но пусть будет так.

Решил я однажды прогуляться по популярной среди мошенников площадке под названием "Wallapop" (имеет 5 филиалов в разных странах ЕС)
1726255056724.png



В последнее время их антифрод система сходила с ума, теперь там не только нельзя отправлять фотографии, но и нельзя отправлять ссылки даже на сам Wallapop (при отправке приходит письмо от системы, что ссылка не будет показана продавцу, ведь теперь отправка ссылок на сторонние ресурсы запрещена :) ), но даже если каким то образом прокинуть её, например "wallapop[.]com 182.phishing.com", то при переходе по ссылке продавец увидит, что редиректы на другие сайты также запрещены. Поняв что в таком направлении я ничего не найду - я решил пройтись по обработке запросов, от регистрации и вплоть до бана аккаунта. Вот что я увидел, общение между покупателем и продавцом у них реализовано с помощью WebSocket (конечно это много где практикуется, но на условном Kleinanzeigen подобного вообще нет, а тут они ещё и не фильтруются). Выложив товар с одного аккаунта и отписав с другого, я заметил что в вебсокетах у них всё открыто 0_0 (на условном vinted, общение реализовано также через WebSocket, однако в запросах будет видно лишь открытие чата и присвоение токена, а о сообщениях вообще и слова не будет)

Тут я подумал, что будет если отправить ссылку и посмотреть что будет в запросе? Ведь по сути сообщение от системы вылезает в самом чате (как и любые действия от системы: покупка, продажа, информация о доставке), и посмотрев на него я очень сильно удивился, ведь всё что отличало системное сообщение, от сообщения юзера - это то, что сообщение было отправлено злоумышленником и отправлено ему же, а также


Код: Скопировать в буфер обмена
Код:
<type xmlns='wallapop:message:type'>
    system-message
</type>


И некий

Код: Скопировать в буфер обмена
Код:
<payload>
    {"text":"Text", "type:"no_action}
</payload>


Подменив обычный запрос с текстом я получил это
1726256024428.png

1726256048077.png

1726256097288.png


А отправив его - ситуация стала ещё смешнее, ведь я получил ответ от сервера, а также увидел что сообщение действительно отправилось продавцу :)

Став искать дальше, я вспомнил, что на этой площадке продавец может продать свой товар, указав что отдал его лично из рук в руки и получил деньги, в таком случае объявление будет считаться проданным, а продавец сможет оставить отзыв о покупателе, также как и покупатель о продавце. Найдя этот запрос, стало понятно, что единственно чем отличались подобные сообщения - это элемент "type":"review" в <payload>, подменив его и отправив на сервер - вот что пришло продавцу)

1726256314263.png

1726256361160.png



Также нашёл некий "Delivery" в "type:", в нём можно было изменить текст и была кнопка, однако при нажатии ничего не происходило (второе сообщение в скрине выше)
1726256448680.png



Однако всё не так просто! Так как мы перескочили со стадии привязки банковской карты, оплаты и доставки на стадию отзыва - объявление считалось проданным с момента отправки сообщения с типом review, и вот что с ним произошло.

ДО:
1726256623676.png

ПОСЛЕ:
1726256663895.png



То есть со стороны продавца и других пользователей - оно считалось проданным и на него нельзя было отписать.

А вот что произойдет если нажать на кнопку Valorar, в сообщении с типом Review от лица покупателя и продавца:

1726256753886.png

1726256775732.png

1726256843344.png



Рейтинг покупателя и продавца, а также раздел с товарами продавца:

1726256866570.png

1726256892265.png

1726256911467.png




Попробовав поиграться с html тегами, типами сообщений - я ничего интересного не нашёл, фотку в чат также отправить не смог, ссылка была некликабельна, так что оставляю это на тех, кому будет интересно. Конечно можно было сделать авторегер и просто выкупить все товары на площадке, чтобы словить лулзы с этого, но так далеко мне было идти не интересно, да и к тому же лень (не знаю что там сейчас, но по последним словам тех, кому я дал это с софтом использующим api mitmproxy под процент - сообщение от системы в таком виде, как делал это я больше не отправить)

P.S: Я не претендую на то, что это дельная статья или я рассказал о WebSocket'ах всё правильно, так как это первая статься и интересная уязвимость, которую я нашёл, а в веб пентесте я всего месяца три. Надеюсь кому то это будет полезно или по крайней мере интересно посмотреть не только на всем известные cve'шки, но и на такой нестандартный подход.

Также извиняюсь, если плохо сформулировал свою мысль и за допущенные грамматические ошибки, так как пишу эту статью с температурой 38.6 :)
 
Сверху Снизу