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


AliExpress RU&CIS

Когда-то давно я мечтал стать специалистом по информационной безопасности и усердно ковырял разные веб-сайты на предмет уязвимостей. Моей самой большой победой стало нахождение уязвимости в платёжной системе 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.




Комментарии (12):

  1. Paranoich
    /#22337226 / +2

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

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

    • anatolius
      /#22337280

      номер счета у карты может быть любым, насколько я нопнимаю.

      • gecube
        /#22338390

        номер счета у карты может быть любым, насколько я нопнимаю.

        так точно

  2. Zolg
    /#22337232 / +1

    Посмотрев на банковские карты своей семьи, я обнаружил у них один и тот же префикс

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

    • posthedgehog
      /#22337262

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

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

  3. encore-show
    /#22337558 / +5

    Возможно я буду не прав, но это ведь не уязвимость. Это баг, который видимо был пройден мимо QA, если они были на тот момент) я то ожидал сейчас статьи с инъекциями, подменой хешей и прочей стори)

  4. DeadMaster
    /#22338180

    Да тут даже не баг, а скорее просто понижения уровня безопасности.
    Это как сравнивать уровни безопасности 4-х и 6-ти пиновых паролей.
    Как бы 6 надёжнее чем 4, но и 4 хватает, тем более что обычно не более 3-х попыток на перебор.

  5. MedicusAmicus
    /#22338276

    Можно спокойно разглашать свой номер карты.
    Для перечислений на нее, к примеру.
    Срок и CVV — то уже личное.

    • gecube
      /#22338392

      нельзя. Для того, чтобы не светить реквизиты карты — уже придумывают всякие ссылки для мгновенной оплаты. И это правильно. Либо СБП — по номеру телефона.

    • asdp
      /#22338980

      CVV далеко не все ресурсы спрашивают, + у крупных «доверенных» есть возможность ещё и проводить платежи без подтверждения по смс, а подобрать срок имея полный номер — дело нескольких минут даже вручную.

      • vaim
        /#22339698

        Такие платежи и откатываются в бесспорном порядке. Т.е. вам ничего не надо доказывать. Просто если у мерча нет cvv или 3d secure, то деньги возвращаются вам.

  6. kisskin
    /#22338434

    Уязвимость, которой невозможно воспользоваться — это не уязвимость