
Привет. Эта статья о том, как на крупнейшей социальной сети для поиска и установления деловых контактов была найдена уязвимость под название Open Redirect.
Небольшая справка
Open Redirect - уязвимость, которая позволяет перенаправить пользователя на любой сайт с доверенного домена. Она возникает, когда программист создает редирект на своем сайте, при этом забывая создать доверенный список доменных имен, на которые может осуществляться данный редирект.
Вот пример. Имеем ссылку
[/URL]
В этой ссылке параметр "url" указывает то, куда необходимо перенаправить пользователя при успешной авторизации. Если значение этого параметра не сверяется на сервере с белым списком, тогда вместо "" можно вставить любой другой адрес, например, "". В данном случае cybredbank будет являться поддоменом домена eachbonus.com, который создал злоумышленник.
Перейдем к сути
Найденная уязвимость на LinkedIn была не такой простой, как в примера выше. Уязвимый URL выглядел так:
Linkedln имеет хорошую защиту от Open Redirect, которую я не смог обойти, используя привычные методы. Например, подставляя в "url" что - то, вроде
url=../t.me/cybred
url=///t.me/cybred
url=///[email protected]/cybred/%2f%2e%2e
меня преследовали неудачи - редирект не происходил.
Наверное, вы уже заметили, что у этой ссылки есть ещё один параметр - "urlHash", который обозначает контрольную сумму значения "url". Т.е., редирект будет работать тогда и только тогда, когда "urlHash" будет верным для нашей ссылки "url". Вернувшись к "сырому" запросу, я обнаружил хедер "Referer", который показывает последнюю страницу, которую посетил пользователь.

И тут меня осенило - "Что, если изменить это значение и посмотреть, работает ли там валидация?". Я изменил его и... *facepalm* - ничего не изменилось.
Разочаровавшись, я забросил пентест LinkedIn. Но, спустя некоторое время, я наткнулся на Github. Взял оттуда Android App Referer (android-app://com.linkedin.android) и подставил в прежний запрос. Результат вы можете увидеть на изображении ниже : )
