Уязвимость в Жилстройсбербанк (XSS)
Update: Теперь исправлено
Сразу скажу, что я сообщил об этом дефекте разработчику сайта, ibecsystems, 16 дней назад. К сожалению, мое письмо осталось без ответа, а уязвимость не была устранена до сих пор. Сегодня напишу детали проблемы в учебных целях (может это как-то ускорит процесс).
Разработчики умеют делать все правильно: всегда проверять данные контролируемые клиентом и обрабатывать все параметры запросов на сервере. Также нужно уследить за библиотеками в клиентской части. В случае же Жилстройсбербанка, разработчики забыли сделать и первое и второе.
XSS (cross site scripting) или межсайтовый скриптинг - это серьезная уязвимость. Простыми словами, на вашем сайте (без вашего разрешения) выполняется чужой код. То есть, кто-то может контролировать что делает или видит пользователь вашего сайта!
На сайте банка есть простой поиск. Давайте сделаем запрос:
Посмотрим что у нас в коде страницы. Интересно, что текст запроса (включая опасные символы “/>) появился в двух местах.
Попробуем получить результаты поиска.
Находим текст запроса без обработки.
Что видит пользователя.
Теперь можно сделать запрос с javascript.
Но это слишком легко. К тому же, браузеры с XSS аудиторами, такие как Chrome и Opera, откажутся выполнять наш alert(), потому что скрипт, оказавшийся на странице, находился в параметре запроса.
Нам лучше сосредоточится на этом участке кода с jQuery. Мы хотим выполнить код после $(’.search’).val().
Это значит нужно “пройти” все $(’#search_results’).highlight() без ошибок.
Первая попытка. Результат такого запроса содержит ошибку и не выполняется браузером.
После перебора нескольких вариантов, я смог найти хороший payload.
hxxp://www.hcsbk.kz/ru/search?query=’);alert(“wow”);//
Код выполняется без ошибок. Имейте ввиду, что в этом случае XSS аудитор браузера вам не поможет.
Кто-то может подумать “Туууй,тоже маған катастрофа! Это же главная страница банка, а не чей-то личный кабинет!”.
Да, это не ключ от квартиры, где деньги лежат личный кабинет, но близко.
К тому же я не смотрел код личного кабинета банка, но у меня плохое предчувствие: банк не поддерживает HTTPS.
Если соединение небезопасно, это значит ваш ИИН, пароль и все что внутри кабинета видно всему свету (от браузера до сервера банка и обратно). XSS это идеальное средство для мошенников.
Отправьте письмо с ссылкой на сайт банка + xss payload. Когда пользователь заполнит форму и логин/пароль от личного кабинета, эти данные попадут на сервер мошенников. Все это будет происходить на сайте банка.
ibecsystems нужно исправить этот дефект и проверить код сайта на другие проблемы. Банк должен подумать о переходе на HTTPS и необходимости Content Security Policy.
Раньше разработчики не воспринимали XSS всерьез, но сейчас все понимают, что XSS - это критическая уязвимость на стороне клиента. Позже я напишу пост о том, что можно сделать с помощью браузера пользователя, XSS, и BeEF.