Как я нашёл уязвимость в QIWI и заработал $200

    Когда-то давно я мечтал стать специалистом по информационной безопасности и усердно ковырял разные веб-сайты на предмет уязвимостей. Моей самой большой победой стало нахождение уязвимости в платёжной системе QIWI, за которую добрые разработчики отсыпали мне 200 долларов. В итоге обнаруженная проблема была решена лишь спустя 3.5 года после жалобы, и после этого о ней стало можно поведать Вселенной. Забавный момент заключается в том, что я обнаружил эту уязвимость совершенно случайно, и на моём месте запросто мог быть ты.

    В далёком 2015-м я пользовался виртуальными дебетовыми картами QIWI для того, чтобы заказывать своей младшей сестрюне ништяки с AliExpress. Система была простой: у тебя на счету в QIWI есть какая-то сумма денег, ты клацаешь на кнопку «Выпустить виртуальную карту» и получаешь информацию для платежей в интернете. Получаешь хитрым образом: что-то видно в веб-интерфейсе (первые и последние 4 цифры из номера карты, срок действия), но самое интересное приходит тебе по СМС (8 средних цифр номера карты, CVV2). Однажды что-то пошло не так: в веб-интерфейсе по-прежнему отображались первые и последние 4 цифры из номера карты, в СМС вдруг стали приходить они же. Остальные 8 цифр, видимо, нужно было выяснить телепатически.

    Я человек простой: вижу проблему – жалуюсь в техподдержку. Весьма оперативно мне пришёл ответ: «Это ошибка временного характера, специалисты занимаются решением данной ситуации. Приносим извинения за доставленные неудобства.» Окееей!

    Через пару дней всё заработало, но не так, как раньше. В СМС по-прежнему приходили первые и последние 4 цифры из номера карты, а на сайте теперь отображались средние 8 цифр.

    Wait a minute, а вдруг тут есть проблема безопасности, подумал я? Как и любой человек из большого города, я в своей жизни видел разного рода чеки. На них обычно указываются последние 4 цифры из номера карты, а значит, эти данные секретом не являются. Ещё они часто видны на сайтах, где ты вводишь и сохраняешь данные своей карты. Пару раз я видел кассовые чеки, где были указаны также первые 4 цифры. Посмотрев на банковские карты своей семьи, я обнаружил у них один и тот же префикс. Тоже так себе секретик, значит. Итак, раньше по СМС приходили секретные данные, на сайте отображались публичные, а теперь всё стало наоборот!

    Я сел за компьютер и написал обстоятельный баг-репорт в программу по поиску уязвимостей, попутно нагуглив всякие интересности про номера банковских карт. Моя главная мысль звучала так: «Всё было хорошо, а стало плохо». Через 9 месяцев мне дали за это денег, а ещё через 2.5 года починили ошибку и разрешили раскрытие истории. Что ж поделаешь, иногда нужно уметь ждать! На следующей итерации QIWI применили иную концепцию, которая кажется мне более удобной и безопасной: чтобы посмотреть все реквизиты на сайте, нужно ввести на нём код подтверждения из СМС.

    Заметить и пожаловаться на этот баг мог кто угодно, в том числе ты, дорогой друг. Как видишь, тут не требовалось никаких специфических знаний по информационной безопасности и даже специального поиска проблемы, всё произошло практически само собой.

    Будьте котиками, жалуйтесь разработчикам на уязвимости и баги, и всё у всех будет хорошо!

    Оригинал опубликован в моём блоге 23.03.19.

    Комментарии 5

      +2
      Пару раз я видел кассовые чеки, где были указаны также первые 4 цифры. Посмотрев на банковские карты своей семьи, я обнаружил у них один и тот же префикс.

      Это тип платёжной системы. Виза начинается на «4», мастеркард — 5, мир — 2. Остальные 5 (?) цифр обозначают организацию, кажется называется это банковским идентификатором. Если у вас в семье у всех сбер — то возможно, что эти цифры будут одинаковы.
      Остальные цифры — это уже номер счёта. Кроме последней — проверочное число или контрольная цифра.
      Вообще, чем меньше светишь свой номер — тем лучше. Но выходит, что самая секретная часть — это цифры с седьмой по предпоследнюю.
        0
        номер счета у карты может быть любым, насколько я нопнимаю.
        +2
        Посмотрев на банковские карты своей семьи, я обнаружил у них один и тот же префикс

        Первые 6-8 цифр в номере карты это bin (идентификатор [филиала] банка). Последняя — контрольная сумма. Такчто 'секретных' из первой и последней четверки всего три символа.
        Но, скажите, почему вы в этом видите уязвимость?
        В смысле почему канал передачи информации по sms вы считаете более надёжным, чем по https ?

          –1
          Я не считаю, что передача информации по SMS более надёжна, чем https.

          Мой point был такой. Предположим, что злоумышленник получил доступ к аккаунту жертвы на сайте, но не имеет её второго фактора аутентификации — мобильного телефона, потому не может просто переслать себе деньги. Он решает оплатить что-то с помощью карты. Для этой задачи раньше ему нужно было подобрать больше десятичных цифр, чем после изменений в алгоритме. (Особенно с учётом того, что последние цифры являются полупубличной информацией, так что в теории их можно где-то найти.) Комбинаторная сложность в конкретном сценарии уменьшилась.
          +2
          Возможно я буду не прав, но это ведь не уязвимость. Это баг, который видимо был пройден мимо QA, если они были на тот момент) я то ожидал сейчас статьи с инъекциями, подменой хешей и прочей стори)

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.