Здрасте, %username%.
Давеча новость увидел, XSS на любом сайте с помощью Yahoo тулбара . Блин, а ведь круто, когда плагин известного разработчика участвует в построении страницы. Но ещё раньше этой новости у меня была другая, подобная ошибка в плагине, конечно немного поскромнее, но все же. Я дождался фикса, теперь думаю рассказать.
nВ Яндекс.Браузер встроен удобный переводчик . Выделяешь текст на незнакомом языке, нажмешь на стрелочку и вот тебе перевод. Это чертовски удобно, не нужно делать копипаст, выделил незнакомое слово или словосочетание — и готово. Ну у меня с иностранными языками херово, поэтому мне он очень по-душе . Так вот.
Перевод в плагине приходит в json, стоит nosniff (не получится запилить xss в старых версиях IE), и к тому же обрабатывается на translate.yandex.net, то есть куки яндекса не украсть. Если выделить <script>alert(1)</script>Pи перевести — ничего не произойдет. Черт, зачем я пытаюсь заинтриговать, я ж уже написал в заголовке, что будет…
Ладно, без воды: в результате неправильной обработки ответа в плагине выполнялся произвольный js код на любом сайте, где пытаешься сделать перевод.Flickr, Yahoo, Google, Pinterest, Youtube, Amazon, Twitter, да тысячи других сайтов, где можно воспроизвести alert(1), главный критерий — это пользовательский текст, если можно разместить свой текст (хоть и под фильтрами) переводчик выполнит скрипт. Вообще, изначальный вектор, который я нашёл, был <i onmouseover=alert(document.domain) <>>, в ответе приходило:
{"code":200,"lang":"en-ru","text":["<i onmouseover="alert(document.domain)" <="">>"]}
(прикольно, да?)
Мне сначала никто не поверил, пришлось записывать видео:
nВот такая скромненькая, но интересная ошибка, в реальной жизни такое эксплуатировать можно только через социальную инженерию (подсунуть текст на непонятном языке с скриптом и Pсказать — чувак, переведи это). Ну да ладно, привет семье, %username%, а я afk, лето же!