[recovery mode] Банки. Ошибки и уязвимости

в 14:53, , рубрики: xss, банк, информационная безопасность, ошибки, Русский стандарт, метки: , , ,

Решил ради интереса посветить день обзору сайтов банков.
Первый из таких стал официальный сайт Россельхос Банка (реклама дала о себе знать :) ), следующий Русский стандарт банк, далее Альфа-Банк.

Целью было не взломать или добиться вывода какой-либо секретной информации, а просто проверить на сколько хорошо сделаны официальные сайты банков.

Россельхос Банк

Сайт работает на CMS Bitrix

Ошибки.

Первое, что бросилось мне в глаза — модуль вывода новостей, ибо там есть параметры выбора года, месяца, дня и ещё кол-во новостей на одной странице.

Выбор даты.

В адресной строке, указав год 200 и месяц 20 я увидел, что не было сообщений об ошибке и более того — эти данные появились в селекте на странице, а значит входящие данные выводятся на странице.
Далее решил проверить возможность SQL инъекции — неудачно.
Следующим шагом была проверка на XSS — вот тут уже стало интересно.

Спец. символы не экранируются и html символы не преобразуются в html сущности, а значит можно внедрить любой код.
К сожалению (или к счастью банка) все попытки внедрить такие XSS как вызов алерта или iframe не удались, так как в первый тег вставлялся пробел.
Входящие данные:

20"></option></select><script>

На выходе:

20"></option></select><sc ript>

[recovery mode] Банки. Ошибки и уязвимости

Максимум, что можно сделать, это вставить картинку или ссылку (без вызова js кода).

[recovery mode] Банки. Ошибки и уязвимости

Ограничение кол-ва новостей.

Следующим шагом была проверка ограничения, на странице можно выбрать от 5 до 20 новостей.
Но как вы уже, наверно, понял — ограничение можно обойти.
Вы можете спокойно указать 100000 новостей, после чего на сайте появятся все новости.

Ссылки на новости.

На странице новостей также увидел, что у ссылок на новости странное окончание.

[recovery mode] Банки. Ошибки и уязвимости

Все попытки манипуляции с этой переменной провалились, хотя подозреваю, что если бы был включен Register_Globals, то можно было бы выполнить XSS.
Дальше решил перейти на страницу пресс-центра, там увидел подобную ошибку, но уже без переменной $page

[recovery mode] Банки. Ошибки и уязвимости

Решил и на этой странице произвести манипуляции — удачно. При передачи переменной page через GET всё содержание переменной вывелось в ссылке, но двойная кавычка была преобразована.

[recovery mode] Банки. Ошибки и уязвимости

Ответ.

Ответ последовал через несколько часов, поблагодарили и поинтересовались откуда такая забота об их банке :)

Сами ошибки были исправлены, примерно, через 3-4 дня, кроме вывода всех новостей, видимо, не посчитали это ошибкой.

Русский стандарт банк

CMS сайта не узнавал.

XSS

Суть XSS уязвимость оказалась в том, что параметр из GET запроса передаётся в код страницы в нескольких местах, но самое главное — в js код.
В этом js коде определяется переменная requestUri (отвечает за адрес текущей страницы), но при передачи параметров нет экранирования одинарной кавычки, что позволяет нам выполнить произвольный js код.

[recovery mode] Банки. Ошибки и уязвимости

[recovery mode] Банки. Ошибки и уязвимости

Дальше не стал проверять сайт, ибо этого уже достаточно.

Ответ.

Русский стандарт решил не отвечать на моё сообщение, но дыру закрыли.

Альфа-Банк

Мельком посмотрел многострадальный Альфа-Банк, а именно поддомен идея.альфабанк — тоже нашёл XSS, единственное, что помешало успешно выполнить код это слеш, он воспринимается как разделитель, т.к. параметры передавался через GET (idea.alfabank.ru/accepted/page88

Автор: shapeshifter08


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js