Категория > Новости > Взлом Seedr. Райтап — победитель Pentest Award в номинации «Пробив» - «Новости»
Взлом Seedr. Райтап — победитель Pentest Award в номинации «Пробив» - «Новости»25-09-2023, 00:00. Автор: Алла |
Pentest Award — премии для специалистов по тестированию на проникновение, которую учредила компания Awillix. Мы публикуем лучшие работы из каждой номинации. Эта статья — победитель в номинации «Пробив». Читай также райтапы, занявшие второе, третье и четвертое места. Не буду скрывать, я — фанат программы баг‑баунти VK на HackerOne. Иногда холдинг приобретает новые компании, и программа расширяется, что дает баг‑хантерам неплохой шанс собрать «низко висящие фрукты» — уязвимости, которые могут быть найдены без существенных затрат времени и усилий. Читайте также - У Вас переезд в новый офис? И Вы хотите, чтобы он прошел быстро, без выведения бизнеса из рабочего режима, без лишних задержек и ненужной суеты? Мы не только Вам поможем в этом, но и приложим максимум усилий, чтобы переезд прошел незаметно - офисный переезд по доступным ценам. По своему опыту могу сказать, что получить доступ к чему‑то, что до тебя никто не пытался взломать, очень выгодно. На площадке HackerOne есть возможность подписаться на интересующую тебя программу и получать обновления о любых изменениях в правилах. Этим я и воспользовался, чтобы быть одним из первых, кто начнет тестировать недавно добавленный сервис. В течение 2021 года я не очень активно хантил и не следил за обновлениями в избранной программе. Именно по этой причине я пропустил уведомление о том, что платформа Seedr, которая помогает быстро распространять видео в интернете (сейчас уже не действующая), была добавлена в скоуп. Моя первая встреча с Seedr состоялась в октябре 2021 года. Я начал тестировать и сразу же обнаружил несколько банальных XSS-уязвимостей, но решил не сообщать о них, так как шанс получить дубликат был слишком высок. В настоящее время ты можешь просмотреть раскрытые отчеты других баг‑хантеров и заметить, насколько нетипичные для современных приложений уязвимости они нашли в Seedr:
Подумав, что мой поезд ушел, я решил не тратить силы на этот проект и продолжил прокрастинировать. Находка, которая привлекла мое вниманиеЯ вернулся к тестированию Seedr во время декабрьского отпуска в другой стране, где с собой у меня был лишь рюкзак и ноутбук. После некоторого времени пребывания в таких условиях у меня просыпается «баг‑баунти‑голод» и появляется желание найти что‑нибудь интересное. Для разогрева я обычно возвращаюсь к уже знакомым сервисам и стараюсь взглянуть на них свежим взглядом. На этот раз я уделил больше внимания разведке Seedr, а именно поиску и перечислению поддоменов, сканированию портов, перебору веб‑директорий и так далее. К счастью, я нашел более заманчивые вещи: GitLab, Grafana, несколько хостов API, cron-файлы в веб‑директории, трассировки стека и многое другое. Чем больше точек входа находишь, тем выше шанс отыскать что‑то интересное. Хотя ни одна из находок не оказалась стоящей того, чтобы о ней сообщить, кое‑что все же привлекло мое внимание. В исходном HTML-коде страницы https://player.seedr.ru/video?vid=cpapXGq50UY&post_id=57b6ceef64225d5b0f8b456c&config=https%3A%2F%2Fseedr.com%2Fconfig%2F57975d1b64225d607e8b456e.json&hosting=youtube Готов поспорить, что более опытный читатель уже захотел изменить GET-параметр Когда я открыл в браузере ссылку После нескольких тестовых запросов я понял, что GET-параметры Предположив, что плеер, скорее всего, поддерживает не только YouTube, я изменил GET-параметр Итак, похоже, в зависимости от значения GET-параметра GET-параметр Что еще интересно, в случае с Vimeo сервер делает запрос к Я предположил, что после функции Ого, неужели у нас здесь небезопасная десериализация? Безопасная, пока ответ контролирует Vimeo. Возможные сценарииВ тот момент у себя в голове я уже видел три возможных сценария атаки:
После нескольких часов различных модификаций GET-параметра Итак, первый сценарий не сработал, поэтому я перешел к следующему — контролируемому ответу на Эндпоинт с контролируемым ответом должен отвечать следующим требованиям:
Ниже представлены некоторые из моих попыток найти требуемое поведение на Первая: Недостатки: код ответа HTTP 404 Not Found, не поддерживаются символы Вторая: Недостатки: код ответа HTTP 404 Not Found, не поддерживаются символы Третья: jаvascript callback. Недостатки: Четвертая: экспорт чата прямой трансляции. Недостатки: дата и имя в начале строки, требуется аутентификация. К сожалению, второй сценарий также не сработал, поэтому моей последней надеждой оставалось найти открытый редирект на Открытый редиректВсе это время, пока я раскручивал уязвимость, я думал о статье Harsh Jaiswal Vimeo SSRF with code execution potential. Я отчетливо помнил, что для успешной эксплуатации использовалось несколько открытых редиректов на Из‑за того, что информация на скриншотах была недостаточно скрыта, удалось предположить уязвимый эндпоинт по используемым GET-параметрам. Учитывая это, я немного погуглил и почитал документацию Vimeo API и смог определить, какой именно эндпоинт использовал Harsh в своей цепочке. В любом случае оставалось неясным, какие значения GET-параметров я должен передать. Я редко прошу кого‑то о помощи, не считая нескольких друзей, но, поскольку я был в тупике, Harsh был моей последней надеждой. После того как я написал ему и предоставил всю имеющуюся информацию, он поделился со мной рабочей ссылкой с открытым редиректом, которая оказалась такой же, как я и подозревал, но с верными значениями GET-параметров. По этой ссылке я понял, что это не баг на Итак, теперь у меня есть работающий открытый редирект на Отлично, я наконец‑то словил HTTP-запрос на свой хост. Прежде чем перейти к десериализации, я решил немного поиграть с SSRF. Результаты смотри на скриншотах. https://127.0.0.1https://127.0.0.1:22http://127.0.0.1:25 Из‑за того что возвращаемое значение из функции Как только я понял, что использовал почти весь потенциал этой SSRF, я переключился на эксплуатацию функции Небезопасная десериализацияВкратце объясню, что необходимо для успешной эксплуатации небезопасной десериализации в PHP:
Как видишь, на тот момент выполнялось только одно требование из четырех. О серверном коде на хосте я знал слишком мало, поэтому единственный способ эксплуатации — это вслепую попробовать все известные цепочки гаджетов. Для этого я использовал инструмент PHPGGC, который по сути является набором полезных нагрузок для эксплуатации функции Перейти обратно к новости |