Pull to refresh

Внутренности CDN бар-квиза и этичный хакинг

Пример бар-квиза


Бар-квиз или паб-квиз — это такой модный в последнее время способ проводить время вечером в пятницу. Желающие собираются в одном заведении командами по несколько человек и отвечают на подготовленные ведущим вопросы. Команда, которая ответила лучше всех, получает символический приз типа бутылки шампанского или коробки конфет.


Естественно, эту нишу рынка не могли не захватить стартаперы, и сейчас можно увидеть миллион разнообразных франшиз бар-квизов разной успешности. Один из них — Мозгобойня — пошел дальше и организовал компьютерную версию бар-квиза под дочерним брендом MozgoParty.


Когда ко мне в руки попал бесплатный пробник игры, выяснилось, что количество сеансов ограничено. Во мне вспыхнул исследовательский интерес, и я пошел разбираться, как всё это работает, и нельзя ли как-нибудь получить лишнюю игру или сеанс.
Спойлер: дыра нашлась, дурацкая и огромная


Как вообще устроена безопасность и CDN у Мозгобойни


На самом деле, сравнительно несложно.


Все материалы для игр (что MozgoParty, что Мозгобойни) хранятся в bucket'e AWS. Там лежат фотографии, музыка, озвученные голосом вопросы из MozgoParty, и документы для того, что нужно распечатать и раздать игрокам, типа бланков ответов.


На стороне магазина при покупке выдается уникальная ссылка на саму игру. Надо думать, она прямо там и генерируется, но эта часть, разумеется, скрыта в бэкенде. Уникальная часть ссылки состоит из десяти букв-цифр разного регистра без спецсимволов, так что перебрать эту часть можно было даже не надеяться. Она выглядит так:


https://game-party.mozgo.com/YW9oyYW569

При переходе по ссылке игра показывает предупреждение:


предупреждение о количестве игр


И при нажатии кнопки "играть" начинается самое интересное — игра обращается к бэкенду и тот отдаёт просто список ссылок на амазоновский бакет, позволяющий забрать материалы конкретной игры. Для того, чтобы не позволить забрать все подряд любому встречному, названия файлов рандомизированы, так что итоговая ссылка выглядит так:


https://mozgo-qiuz-materials.s3.amazonaws.com/31459/sgdk7L7eGAAGVazM.mp4

Так в чем же уязвимость?


Первая очевидная уязвимость в том, что купив игру, можно скачать все её материалы по ссылкам и воспроизвести хоть в PowerPoint. Однако, я предполагаю, что об этом разработчики игры знали и были готовы взять на себя этот риск.


Менее очевидная и закрытая уже месяц как уязвимость, о которой я сообщал разработчикам, заключалась в том, что bucket был настроен так, что главная страница отдавала список файлов — причем не только MozgoParty, но и Мозгобойни — в удобном XML/JSON на выбор. В итоге, хорошо настроенный парсер и несколько часов личного времени позволили бы злоумышленнику собрать все игры без особых проблем.


Минутка нытья или об этичном хакинге


Разумеется, я решил, что хочу быть хорошим белым хакером и сообщу об уязвимости разработчикам. К их чести, спустя буквально пару часов bucket был перенастроен и ошибки больше не было.


Команда поддержки изначально заверила меня, что найдет способ отблагодарить — и нашла, предложив в качестве бонуса бесплатную игру этой же самой Mozgoparty. На этом моменте, надо признаться, у меня порвался шаблон. Ну, потому что давать бесплатную игру в качестве компенсации за то, что рассказал как взять все игры бесплатно — это иронично.
В процессе переговоров они даже извинились, но сообщили, что совершенно не готовы говорить о чем-то, кроме бонусов в своем продукте.


Мораль


Мораль, наверное, в том, что надо аккуратно настраивать AWS, и аккуратно договариваться о баг-баунти до раскрытия уязвимости. Или нет?

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.