Сложность: Высокая
Url: https://twitter.com/i/safety/report_story
Ссылка на отчет: https://hackerone.com/reports/52042⁹
Дата отчета: 21 апреля 2015
Выплаченное вознаграждение: $3,500
Описание:
В апреле 2015 был сообщено, что в Twitter найдена уязвимость,
позволяющая хакерам устанавливать произвольные cookie, до-
бавляя дополнительную информацию в запрос к Twitter.
По существу, после создания запроса к указанному выше URL
(легаси-url Twitter, позволявший людям жаловаться на рекла-
му), Twitter возвращал cookie для параметра reported_tweet_id.
Однако, судя по отчету, валидация Twitter, подтверждающая,
что id твита был числом, была несовершенна.
Хотя Twitter валидирует этот символ новой строки, 0x0a, не
позволяя его отправить, валидация может быть обойдена ко-
дированием символов в кодировку UTF-8. Twitter произведет обратную кодировку символов в unicode, таким образом, делая
фильтр бесполезным. Вот пример:
1 %E5%E98%8A => U+560A => 0A
Это важно, поскольку символы новой строки интерпретиру-
ются сервером буквально, создавая новую строку, которую
сервер читает и исполняет, в данном случае, возвращая новые
cookie.
CLRF-атака может быть еще более опасной, если система под-
вержена XSS-атакам (смотрите раздел Cross Site Scripting). В
этом случае, поскольку фильтры Twitter пройдены, пользова-
телю можно будет вернуть новый ответ, включающий XSS-
атаку. Вот URL:
1 https://twitter.com/login?redirect_after_login=https://\
2 twitter.com:21/%E5%98%8A%E5%98%8Dcontent-type:text/html\
3 %E5%98%8A%E5%98%8Dlocation:%E5%98%8A%E5%98%8D%E5%98%8A%\
4 E5%98%8D%E5%98%BCsvg/onload=alert%28innerHTML%28%29%E5%\
5 98%BE
Обратите внимание на добавленное %E5%E98%8A. Если мы
заменим эти символы настоящими переносами строк, вот как
будет выглядеть заголовок:
1 https://twitter.com/login?redirect_after_login=https://\
2 twitter.com:21/
3 content-type:text/html
4 location:%E5%98%BCsvg/onload=alert%28innerHTML%28%29%E5\
5 %98%BE
Как видите, переносы в ссылке позволяют создать новый за-
головок, который вернется с исполняемым Javascript-кодом svg/onload=alert(innerHTML). С этим кодом злоумышленник
может украсть у ничего не подозревающей жертвы сессию
Twitter.
Выводы
Хороший белый хакер сочетает в себе наблюда-
тельность и навыки. В этом случае автор отчета,
@filedescriptor, знал о предыдущем баге Firefox,
связанном с необрабатываемой кодировкой. Это
знание привело к тестированию подобной ко-
дировки в Twitter для получения возможности
вставки новых строк.
Когда вы ищете уязвимости, всегда помните, что
важно думать иначе и отправлять закодирован-
ные значения, чтобы увидеть, как сайт обрабаты-
вает введенные вами данные.