3 Сентября, 2015

Подделываем ссылку в клиенте твиттера

Bo0oM

Приветы %username%!

Недавно я заметил, что клиент twitter’а для android открывает ссылки с помощью встроенного в приложение компонента, а не использует браузер. Поведение у компонента было странное, можно было заметить, что если ходить по страницам, то ссылка не всегда обновляется, хотя я уже перешел на другой сайт. «Что за нахер?» — подумал я и начал копать. Первым делом, косо посмотрел на компонент WebView, но тесты в других приложениях ничего не выявили. Как выяснилось, виной всему com.twitter.android.browser, обновление происходит только когда срабатывает onReceivedTitle в WebChromeClient, а не срабатывает он в двух случаях:

  1. если ты возвращаешься на страницу, в которой нет <title>
  2. если ты переходишь на страницу, в которой <title> начинается с «http://» или «https://» (нашёл @Black2Fan)

При правильном использовании это даже можно эксплуатировать, например подсунуть фейк. Ладно, знаю что тебе лень читать, так что покажу сразу, что это даёт:


А работает это очень просто, в личку приходит ссылка, которая перенаправляет на любой сайт, пусть даже на несуществующую страницу. Жертва посмотрит, захочет вернуться и нажмет кнопку «назад». А тут приходит наш контент. Наша страница. Наш фейк. А адрес ссылки любой! Да хоть порнофильм на сайте президента!

Чтобы протестировать, вот ссылка:



Откройте в Android клиенте, перейдите по ссылке, нажмите кнопку «назад». Бага была протестирована на Android 4.4.2 и 5.1.

twitter_fake

По поводу bugbounty, ответ с hackerone:

It may be that the WebView browser is the source of the bug and does not behave properly on returning to pages that initially perform javascript forwards to other pages. In this case, this would not be a bug on software Twitter maintains and would be out of scope for the bug bounty.

Ну на нет и суда нет! Удачи, и аккуратнее там, в этих ваших твиттерах!)