— У нас дыра в безопасности.
— Ну, хоть что-то у нас в безопасности.


— Айфоны, вон, каждый год ломают, и ничего.

Я нашел эту ошибку случайно. Уверен, что ни один тестировщик и не подумал бы пойти таким путем — это настолько не очевидно, дико и непредсказуемо, что только случайность помогла мне поучаствовать в bug bounty от Xiaomi. В этом посте расскажу о том, как мне это удалось, что за это было и почему китайские сервисы — зло.


Предыстория


В операционке MIUI можно создать два «пространства» (для простоты я буду называть их профилями) — полностью независимых набора настроек, приложений и файлов, недоступных друг из друга (не считая отдельного приложения «Импорт»). Оба профиля можно запаролить и, допустим, пользоваться устройством с кем-то еще.

В чем, собственно, замес?


Замес в том, что я нашел способ переходить из второго профиля в первый без ввода пароля. Это было возможно через приложение Google Диска, которое по умолчанию установлено в глобальной прошивке на MIUI 8 и сразу доступно во втором профиле.

Второй профиль имеет меньше прав, чем первый — в нем, например, нельзя включать-отключать мобильный интернет или управлять резервными копиями в Google Диске. Если попытаться это сделать, приложение предлагает сходить в системный диалог «Manage Users» и выбрать пользователя, от имени которого совершается действие.

Но что-то пошло не так, и выбор главного профиля в этом окне приводил не к управлению резервными копиями, а к переходу в него без ввода пароля.

Сомнительная аналитика #1


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

С другой стороны, я не успел толком исследовать принцип появления экрана «Manage Users». Вероятно, есть системные методы для его вызова и из других приложений, но так далеко я не заходил.

Как с этим жить?


Сначала я думал заявить это как баг гуглового приложения (я слышал, что они иногда дают деньги за это). Но здравый смысл все-таки подсказал, что дыра в безопасности операционки может быть оценена дороже (да и фиксить ее нужно быстрее), и я пошел искать программу для баг баунти от Xiaomi.

Недолгие поиски привели меня в Xiaomi Security Center. Это сейчас туда худо-бедно процентов на 30 добавили английский перевод, а тогда он выглядел примерно так:


Xiaomi Security Center, sec.xiaomi.com

С гугл-переводчиком я почитал какие-то общие вещи про программу и понял, что найденная уязвимость тянет на категорию High — к ней относят SQL-инъекции, уязвимости в бизнес-логике, XSS с доступом к cookie, получение информации о пользователях устройства, эскалацию привилегий, обход экранов логина и еще несколько вещей. «Окей», подумал я, методом тыка нашел форму и пошел описывать проблему.


Форма отправки уязвимости

Встроенный в хром гугл-переводчик хорош ровно до момента, когда дело доходит до динамически формируемых выпадающих списков. Если поля title, description, proof-of-concept и solution были еще как-то понятны, то, что от меня хотели в списках, я не понимал совсем. Пришлось выковыривать иероглифы из нужных мест страницы через просмотр HTML-кода и переводить вручную.


Спасибо, теперь все понятно

Оказалось, что первый список определял тип уязвимости, второй конкретизировал ее, а в третьем нужно было выбрать масштаб проблемы — от low до major.

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

Сколько пришлось ждать?


11 апреля прямо в Security Center я получил сообщение от безымянного сотрудника Xiaomi.
Оно было таким:
> Thanks for your submission,this is not miui's issue so this got minor and no reward.Thanks for your support.
> Спасибо за отправку, это не проблема miui, она помечена незначительной и останется без награды. Спасибо за поддержку.

«Да как же так? Но это! Же! Дыра! Размером! С! Кимберлитовую! Трубку! В Якутии!» — примерно так я негодовал следующие четыре часа, а потом успокоился и написал ответное сообщение. Вот такое:

> Miui allows to view «manage users» screen and switch account without pass. anyway, do you have plan to fix this issue?
> В MIUI можно попасть на экран «Управление пользователями» и переключаться между аккаунтами без пароля. В любом случае, вы планируете устранять проблему?

Я был морально готов ждать еще пять дней (раз уж я все равно остался без награды), но ответ пришел через час:

> sorry,my mistake ,I will test again
> Простите, виноват. Проверю еще раз.

Сомнительная аналитика #2


Из-за «ошибки» оператора дыра могла быть закрыта примерно через бесконечность. Не знаю, как это работает в других программах поиска уязвимостей, но такой подход в Xiaomi явно настраивает на удручающие мысли.

Ошибку, тем не менее, исправили уже через две недели после перетеста — в свежем апдейте системы такой трюк уже не повторялся. По этой же причине сейчас пишу этот пост.



К счастью, тестирование не заняло много времени и на следующий день я получил вознаграждение в 1000 (тысячу) монет в магазине внутри Security Center.

Что еще за магазин?


На sec.xiaomi.com есть каталог вещей, которые можно купить за внутреннюю-безопасностную-валюту-победы (извините, я просто не придумал объяснения проще).


Ни в чем себе не отказывайте на тысячу призовых монет

Поняв, что ничего дельного из товаров выбрать не получится, я начал изучать еще одну интересную опцию — можно было «купить» юани за монеты, по курсу 1 юань за 1,5 монеты. Быстрый подсчет показывал, что моя тысяча монет лихо превращалась примерно в 5200 рублей (по курсу на момент написания статьи), и это выглядело очень хорошим вознаграждением за нажатие на пару кнопок в сомнительных местах системы.

Конечно же, я набил корзину юанями за 900 монет (квантизация по 150).
Конечно же, нажал на китайскую версию надписи «Оформить заказ».
И, конечно же, сразу столкнулся с кучей проблем.

Здесь был бы скриншот формы, если бы я его не потерял

Они требовали от меня имя, номер банковской карты и CVV номер ID.


Китайская форма ввода имени

Ни имя, ни номер российского паспорта не подходили — китайский номер ID содержит от 12 до 16 символов, а для имени отводилось всего от 2 до 6.
Но после пройденного награду упускать не хотелось, и я решил написать письмо в техподдержку и узнать, как выводят деньги иностранцы (которых, судя по никам ловцов уязвимостей, было много). Окей, с переводчиком ищем нужный раздел, заходим…


… черт.

Ладно, пришлось выбирать товары. В тысячу монет вместились умная лампа, умная 360-градусная камера и bluetooth-колонка. Вместе они стоят около 7200 рублей (или 124 доллара).

Оставшиеся три десятка монет я проиграл в «колесе удачи» там же на сайте.

Благо с оформлением проще, и пришлось просто придумать, как вместить адрес международной доставки в поле с ограничением в 100 символов, а также сократить имя до шести букв — Evgeny, а полное написать в «Notes».

Заканчивался июль.

А долго мне еще ждать?


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

Двадцать пятого августа я сделал еще одну попытку, и через пять дней получил ответ с треком посылки и извинениями.

Доставка заняла еще неделю, и я наконец-то получил посылку с наградой за баг баунти в Xiaomi. Приятно, что курьер из EMS доставил ее до двери и не пришлось никуда ехать. Happy end.

В комментариях готов ответить на ваши вопросы о любых этапах этого растянутого во времени процесса.

Спасибо за внимание!

Комментарии (57)


  1. Dreyk
    28.09.2017 09:57

    не совсем понял, что случилось с техподдержкой по поводу вывода денег?


    1. evil_me Автор
      28.09.2017 09:58
      +23

      Чтобы им что-нибудь написать, нужно ввести китайскую капчу.


      1. Dreyk
        28.09.2017 10:02
        +10

        надо было уже им заодно и капчу поломать :)


      1. Miketsukami
        28.09.2017 13:16

        Зря вы сдались. Можно же вводить иероглифы средствами рукописного ввода.


        1. Kobalt_x
          28.09.2017 13:23
          +2

          Чтобы получить распознаваемые иероглифы в таком вводе, нужно знать хотя бы порядок радикалов. Иначе получается что-то вообще нераспознаваемое


          1. Miketsukami
            28.09.2017 13:26

            Есть системы ввода иероглифов, у которых порядок опционален.
            У меня на смартфоне словарь кандзи с отключаемым порядком радикалов, к примеру.


      1. Iqorek
        28.09.2017 16:24
        +2

        Лайфхак, на гуглотрасляторе можно нарисовать иероглифы и оно их неплохо распознает

        Вот так оно выглядит
        image


  1. erwin_shrodinger
    28.09.2017 09:57

    В этом посте расскажу о том, как мне это удалось, что за это было и почему китайские сервисы — зло.

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


    1. evil_me Автор
      28.09.2017 10:00
      +5

      В том числе.
      Еще они, вроде как, позиционируются как глобальная программа, но в целом юзер-френдли только для китайцев.


      1. erwin_shrodinger
        28.09.2017 10:17
        +1

        думаю, что это всё решится со временем


        1. evil_me Автор
          28.09.2017 13:36
          +2

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


  1. GeorgWarden
    28.09.2017 10:00
    -5

    Зачем китайцам делать что-то для кого-то, кроме китайцев? Китай — это как параллельная вселенная, только рядом


    1. evil_me Автор
      28.09.2017 10:02
      +7

      Полагаю затем, что они уже давно делают вещи для всего мира?)


      1. GeorgWarden
        28.09.2017 10:06
        +9

        Они делают для себя, а все почему-то думают, что для всего мира


        1. JekaMas
          28.09.2017 10:22
          +2

          Истина! Сталкиваюсь с алибаба — так все и есть. Китай только начинает открывать для себя чудной внешний мир.


  1. VioletGiraffe
    28.09.2017 10:08
    +2

    Пришлось выковыривать иероглифы из нужных мест страницы через просмотр HTML-кода и переводить вручную.

    Для этого в мобильном Google Translate есть перевод по фото и режим дополненной реальности :)


    1. evil_me Автор
      28.09.2017 10:10
      +1

      Вы знаете, я пробовал какие-то программы в процессе. Но все они работали настолько плохо, что я прям расстроился и решил действовать дедовским методом :)


      1. stepmex
        28.09.2017 10:57
        -3

        Для этого уже давно есть решение: chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb
        Выделяешь текст и он автоматически переводится с любого языка.


        1. evil_me Автор
          28.09.2017 11:00
          +1

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


          1. NoOne
            28.09.2017 11:21
            +4

            Использовать Google Translate и камеру на телефоне :)
            Я так удалял китайский антивирус с ПК знакомых.


          1. stepmex
            28.09.2017 13:07

            Я понимаю что это не панацея. И с выпадающими списками она поможет только в комплекте с кодом страницы.
            Данное расширение убирает необходимость ходить и копировать текст в переводчик.
            Чем экономит кучу времени.


            1. evil_me Автор
              28.09.2017 13:14

              Так в хроме уже есть встроенный переводчик по правому клику на странице.


          1. DC_Offset
            28.09.2017 15:03

            Можно открыть список и нажать Ctrl+A :) Не знаю, везде ли сработает, но на хабре работает.


            1. evil_me Автор
              28.09.2017 15:04

              То расширение выше умеет переводить весьма ограниченный объем выделенного текста. Не думаю, что «вся страница» — рабочий кейс для него.


              1. stepmex
                28.09.2017 17:55

                Выделяете текст и тыкаете в иконку приложения, тогда переводить любой объём.
                «Локальный» перевод ограничен по длине.


          1. nidalee
            02.10.2017 09:21

            Да, конечно. Открываете список, включаете приложение на телефоне, делаете фото и пальцем проводите по нужному фрагменту. Иероглифы выделяются и переводятся. Можно выделить часть предложения, если символы разбиты на группы, либо сразу все — без разницы.
            Я так сотни раз переводил интерфейсы японских VN. Жаль, только, что нет десктопного приложения, которому можно просто скормить скриншот. Разве что с эмуляторами… Развлекаться.


            1. nidalee
              02.10.2017 12:45

              Пардон, вы про расширение, а я про приложение.


      1. gmikhail94
        28.09.2017 15:15

        +1 голос за мобильное приложение Google Translate. Работает даже с выпадающими списками: imgur.com/a/HhCo4


  1. sergof
    28.09.2017 10:49
    +8


    1. izzholtik
      28.09.2017 18:57
      +9

      Нужно не отрывать кончик, а разламывать пополам!


    1. awesome_walker
      29.09.2017 13:14

      Ну тут инструкции хотя бы не на китайском языке :)


  1. krak
    28.09.2017 10:53

    В какой версии MIOI был баг и в какой исправили?


    1. evil_me Автор
      28.09.2017 10:57

      MIUI 8 Global 7.3.30
      Исправили в следующем апдейте, который прилетал по воздуху, но извините, я не помню номер.


  1. ket4upstar
    28.09.2017 11:32
    +4

    Что еще раз подтверждает что пока не тыкнешь их носом никто не признает ошибку, и изначально будут пытаться «отмазаться» стандартным ответом. Работал в поддержке, знаю суть работы. Везде одинаково.


    1. evil_me Автор
      28.09.2017 13:27

      Так, вроде, не только в поддержке делают :)


  1. pyrk2142
    28.09.2017 13:09

    Китайские Bug Bounty иногда странные (в том числе, и из-за языка), но мне они обычно платили. Правда иногда любят не признавать уязвимость проблемой и перестать на нее реагировать.

    А вот другая история, как я участвовал в Bug Bounty от Telegram: полгода назад отправил несколько уязвимостей (разные проблемы в приложениях), один раз ответили, что «разработчики посмотрят», после этого они не отвечают на мои сообщения вообще. И не посмотрели, уязвимости все еще живы.


    1. evil_me Автор
      28.09.2017 13:28

      Так проблемы в приложениях или уязвимости?
      Не думаю, что если бы там были критические дыры или что-то похожее, они отложили бы это в долгий ящик.

      Напишите об этом.


      1. pyrk2142
        28.09.2017 13:42

        По классификации OWASP это уязвимости, другие компании подобные вещи закрывают. Хотел написать на этой неделе, но не успел. Надеюсь, что напишу на следующей.


        1. Isis
          28.09.2017 20:16

          В твиттере реагируют быстро, даже сам СЕО. Только вот потом награды не будет :)


  1. awesome_walker
    28.09.2017 13:45

    Я подумал, что вам не только не досталась награда, но еще и что-то очень плохое вам сделали за обнаружение бага.

    Как я участвовал в bug bounty от Xiaomi и что мне за это было


    1. w9w
      29.09.2017 16:18

      «кликбейтный» заголовок)


  1. ket4upstar
    28.09.2017 16:06

    Да, заголовок заинтриговал.


  1. esudnik
    28.09.2017 17:02

    Мда,… думаю что здесь даже потраченное время на заполнении различных бюрократических анкет себя не оправдало при такой награде. На черном рынке вы бы однозначно больше получили за находку такой серьезной уязвимости.


    1. evil_me Автор
      28.09.2017 17:05

      Поделитесь контактами черного рынка?)


      1. esudnik
        28.09.2017 17:14

        вот активные покупатели: www.nsa.gov


        1. evil_me Автор
          28.09.2017 17:21

          Поверю вам на слово :)


  1. ChiefPilot
    28.09.2017 17:17

    Спасибо Вам за статью! Понравилось описание процесса общения — как будто фантастический рассказ прочёл про общение с инопланетянами. :)


    1. evil_me Автор
      28.09.2017 17:20

      Спасибо за комментарий!
      Как верно заметили выше, это немного другой мир, в котором нам еще разбираться и разбираться :)


  1. mr_tron
    29.09.2017 12:03

    5000 рублей. Меньше 100 баксов за уязвимость на повышение привилегий. Имхо это даже круче, чем вконтактик, который дал всего 3000 баксов за возможность залогиниться любым пользователем. Вот и участвуй после этого в официальных баг баунти. Какой-нить zerodium вполне возможно заплатил бы на порядок больше. Судя по прайсу zerodium.com/program.html можно расчитывать до 15000$ (хотя непосредственно за такую багу врядли).


  1. mike_y_k
    29.09.2017 18:01
    +1

    Первый блин сразу получился. Стоит продолжить писать. Спасибо ;)
    А тема общения с поднебесной и на ее ресурсах тема для многотомной серии в духе Физики шутят. Что не история, то перл


  1. Psychosynthesis
    02.10.2017 21:44

    Ну кстати зря вы лампу взяли =)

    У меня такая лампа была привязана к аккаунту, и приложение стояло на старом мобильнике. Когда поменял трубку, поставил на новую приложение, вошёл в аккаунт, сбросил лампу и попытался привязать её к новому приложению. Собственно, на этом моменте лампа перестала быть умной и перестала привязываться куда-либо. Тех.поддержка вообще меня проигнорила с этой проблемой. Так что теперь у меня тупая светодиодная лампа за 1500.


    1. evil_me Автор
      03.10.2017 15:35

      Наверное, вы сделали что-то не так.
      Прошел ту же процедуру (менял телефон практически в самом начале эксплуатации) — полет нормальный.


      1. Psychosynthesis
        03.10.2017 17:46

        Вы извините, но если в простейшей процедуре что-то можно сделать не так, значит что-то не так с процедурой.

        Если устройство не обеспечивает достаточной повторяемости своих функций в процессе эксплуатации — значит устройство мусор.

        Ну и, к слову, там ошибиться-то особо негде — отвязал в старом приложении, сбросил, привязал к новому. Где тут можно ошибиться?


        1. evil_me Автор
          04.10.2017 13:44

          Сервер, например, не тот выбрать.


          1. Psychosynthesis
            04.10.2017 13:52

            А почему на них разные данные? Меня как пользователя почему вообще должно заботить какой там сервер где находится? Неужели как-то синхронизацию настроить было нельзя?

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


            1. evil_me Автор
              04.10.2017 14:03

              Я вам точно не отвечу на эти вопросы.

              А серверов там восемь. От них (и соответственно, локали) зависит то, как будет выглядеть Mi Home, и какие устройства будут доступны для подключения.


              1. Psychosynthesis
                04.10.2017 14:15

                В моём случае речь про YeeLight, и серверов там таки всего два.

                А на вопросы вообще никто отвечать не собирается — поддержка успешно игнорит сообщения на двух языках.