Ниже — просто описание того, как я, обладая далеко не самыми глубокими знаниями в информационной безопасности, смог вывести неограниченное количество средств из третьего кошелька, обладая лишь «кукой» JSESSIONID пользователя.
Шаг 1: получение cookies третьего пользователя.
Не смотря на то, что основной сайт платёжной системы — w.qiwi.com — использует https-шифрование, cookies всё равно хранятся в браузере в незашифрованном виде. Поскольку интересующие нас куки JSESSIONID хранятся лишь до конца сессии, важно лишь вытащить их с компьютера жертвы в нужный момент.
Думаю, останавливаться на том, как это сделать, смысла нет. Есть множество способов получения «печенек» от пользователя. Для специалиста, при должном желании, это выполнимая задача.
Кроме того, на старом сайте QIWI-кошелька, — w.qiwi.ru, в отличие от новой версии, — w.qiwi.com — использовался атрибут «autocomplete=«off»», который запрещает запоминание пароля браузером. К слову, вытащить пароли из Firefox неопытного юзера (по-умолчанию Firefox никак их не шифрует), к примеру, при наличии бэкдора, проблем также не составит. (Впрочем, как и практически из любого другого браузера.)
Шаг 2: подмен cookies и первичная аутентификация
Тут всё просто как дважды два. Уж не знаю почему, но cookie JSESSIONID не привязана даже к IP пользователя. Кроме того, при двух параллельных авторизаций с разных IP под одной «кукой» сайт никак не «сигналит» о возможном взломе пользователю, а ведь стоило бы.
Заходим на w.qiwi.com и подменяем присвоенную JSESSIONID на аналогичную третьего пользователя. В Firefox и Opera это делается за 20 секунд стандартными средствами браузера, для Chrome есть простое расширение, насколько я понимаю.
Всё, мы авторизовались от имени «жертвы».
К слову, подложная сессия, если мы успели пройти под ней аутентификацию, не умрёт даже в случае логаута истинного юзера, если мы будем сохранять её «живой» путём периодических рефрешей.
Шаг 3: проведение платежа без SMS-подтверждения
Двухфакторная аутентификация — важная вещь, которая позволяет обезопасить пользователя гораздо лучше, чем простая связка логин-пароль. Если украсть аутентификационные данные довольно легко, то SIM-карта, казалось бы, спасёт владельца в 99% случаев.
Алгоритм двухфакторной аутентификации применялся в QIWI-кошельке (тот самый w.qiwi.ru, и, к слову, там он был реализован лучше), теперь применяется и в Visa QIWI Wallet. Но в последнем подтверждение платежа по SMS несложно «обойти».
Для этого, во-первых, создаём шаблон нужного платежа. Это может быть простой перевод на другой кошелёк, оплата на кошелёк WebMoney, и т.д. и т.п. За пример возьмём простой платёж на другой Visa QIWI кошелёк.
Затем из этого избранного платежа нам лишь нужно сделать запланированный. И, как это ни странно, система даст нам это сделать без SMS-подтверждения. Для этого в списке избранных платежей нажимаем «Редактировать» внизу, жмём на нужный нам платёж и заполняем форму «Запланировать платеж?», ставим галочку напротив пункта «Платить автоматически». Затем сохраняем платёж и просто ждём указанного нами же времени, когда мы получим перевод.
Платежи могут задерживаться на минуту-другую, но с успехом проходят без ведома пользователя. Точнее пользователь увидит, конечно же, пропажу средств, но уже в отчётах постфактум. (Мне на android-приложение сразу же пришло уведомение о том, что платёж проведён, но уже, очевидно, поздно.)
Есть ещё, конечно, вариант, что третий пользователь за эти пару минут, пока вы проводите манипуляции с избранными платежами, заметит всё это и что-то успеет предпринять, но это маловероятно.
Деньги ушли —
А вот они же пришли —
Вот, собственно, и весь процесс. Буквально за пару минут, имея на руках свежие cookies пользователя (либо связку логин-пароль), путём несложных мероприятий мы можем опустошить кошелёк пользователя.
Послесловие. После написания данного топика, перед его отправкой, проделал такую же операцию на 1 рубль со своего кошелька на несуществующий. Нашёл какой-то телефон центрального офиса Visa QIWI (8 (800) 200-00-59), позвонил. Дождался ответа оператора. Тот сказал, что нужно звонить 8-800-555-74-94 по вопросам QIWI-кошелька.
Позвонил туда. Сказал, что платежа данного не совершал, по SMS, естественно, ничего не подтверждал. Девушка на том конце начала мне уверенно объяснять, что данный платёж прошёл без SMS-подтверждения поскольку… и тут связь почему-то прервалась.
Перезваниваю ещё раз. Другой оператор. Объяснил ситуацию. Сказали писать на fm@qiwi.ru в службу безопасности. Ничего по телефону они не объясняют. Ответ до двух суток.
Письмо написал, расписал всё то же, что и в посте. Прошло двое суток. Ответа не последовало.
И ещё один момент. В топике я писал, что на старом QIWI-кошельке (w.qiwi.ru) проблема безопасности была решена лучше. Так вот там, если нужно создать запланированный платёж, его нужно хотя бы один раз подтвердить по SMS. И так и должно быть, это правильно. Но на новой версии, которая уже не просто QIWI, а Visa QIWI — данный момент упустили.
Важное примечание. Данная статья написана не в деструктивных целях, а для того, чтобы обратить внимание крупной компании на мелкие, но важные недочёты в их продукте. (Службе поддержке, как видимо, не до этого.) Надеюсь, представители QIWI отреагируют и быстро залатают уязвимость, а также постараются продумывать все возможные сценарии поведения пользователя, дабы избежать негативных возможностей социальной инженерии в будущем.
ссылка на оригинал статьи http://habrahabr.ru/post/163653/
Добавить комментарий