— У нас дыра в безопасности.
— Ну, хоть что-то у нас в безопасности.
— Айфоны, вон, каждый год ломают, и ничего.
Я нашел эту ошибку случайно. Уверен, что ни один тестировщик и не подумал бы пойти таким путем — это настолько не очевидно, дико и непредсказуемо, что только случайность помогла мне поучаствовать в bug bounty от Xiaomi. В этом посте расскажу о том, как мне это удалось, что за это было и почему китайские сервисы — зло.
В операционке MIUI можно создать два «пространства» (для простоты я буду называть их профилями) — полностью независимых набора настроек, приложений и файлов, недоступных друг из друга (не считая отдельного приложения «Импорт»). Оба профиля можно запаролить и, допустим, пользоваться устройством с кем-то еще.
Замес в том, что я нашел способ переходить из второго профиля в первый без ввода пароля. Это было возможно через приложение Google Диска, которое по умолчанию установлено в глобальной прошивке на MIUI 8 и сразу доступно во втором профиле.
Второй профиль имеет меньше прав, чем первый — в нем, например, нельзя включать-отключать мобильный интернет или управлять резервными копиями в Google Диске. Если попытаться это сделать, приложение предлагает сходить в системный диалог «Manage Users» и выбрать пользователя, от имени которого совершается действие.
Но что-то пошло не так, и выбор главного профиля в этом окне приводил не к управлению резервными копиями, а к переходу в него без ввода пароля.
В принципе, ничего страшного. Для эксплуатации уязвимости нужно, как минимум, знать один из паролей и иметь физический доступ к телефону. Но даже в рамках какого-то ограниченного коллектива получение доступа к данным, хранимым во втором профиле, может быть крайне неприятным.
С другой стороны, я не успел толком исследовать принцип появления экрана «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
> Простите, виноват. Проверю еще раз.
Из-за «ошибки» оператора дыра могла быть закрыта примерно через бесконечность. Не знаю, как это работает в других программах поиска уязвимостей, но такой подход в 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.
В комментариях готов ответить на ваши вопросы о любых этапах этого растянутого во времени процесса.
Спасибо за внимание!
— Ну, хоть что-то у нас в безопасности.
— Айфоны, вон, каждый год ломают, и ничего.
Я нашел эту ошибку случайно. Уверен, что ни один тестировщик и не подумал бы пойти таким путем — это настолько не очевидно, дико и непредсказуемо, что только случайность помогла мне поучаствовать в 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).
Конечно же, нажал на китайскую версию надписи «Оформить заказ».
И, конечно же, сразу столкнулся с кучей проблем.
Здесь был бы скриншот формы, если бы я его не потерял
Они требовали от меня имя, номер банковской карты и
Китайская форма ввода имени
Ни имя, ни номер российского паспорта не подходили — китайский номер ID содержит от 12 до 16 символов, а для имени отводилось всего от 2 до 6.
Но после пройденного награду упускать не хотелось, и я решил написать письмо в техподдержку и узнать, как выводят деньги иностранцы (которых, судя по никам ловцов уязвимостей, было много). Окей, с переводчиком ищем нужный раздел, заходим…
… черт.
Ладно, пришлось выбирать товары. В тысячу монет вместились умная лампа, умная 360-градусная камера и bluetooth-колонка. Вместе они стоят около 7200 рублей (или 124 доллара).
Оставшиеся три десятка монет я проиграл в «колесе удачи» там же на сайте.
Благо с оформлением проще, и пришлось просто придумать, как вместить адрес международной доставки в поле с ограничением в 100 символов, а также сократить имя до шести букв — Evgeny, а полное написать в «Notes».
Заканчивался июль.
А долго мне еще ждать?
После заполнения формы в личном кабинете не изменилось ничего. Первого августа решил все-таки уточнить, что там с доставкой, и написал сообщение в тот же диалог, где сообщал об уязвимости. Ничего не произошло.
Двадцать пятого августа я сделал еще одну попытку, и через пять дней получил ответ с треком посылки и извинениями.
Доставка заняла еще неделю, и я наконец-то получил посылку с наградой за баг баунти в Xiaomi. Приятно, что курьер из EMS доставил ее до двери и не пришлось никуда ехать. Happy end.
В комментариях готов ответить на ваши вопросы о любых этапах этого растянутого во времени процесса.
Спасибо за внимание!
Dreyk
не совсем понял, что случилось с техподдержкой по поводу вывода денег?
evil_me Автор
Чтобы им что-нибудь написать, нужно ввести китайскую капчу.
Dreyk
надо было уже им заодно и капчу поломать :)
Miketsukami
Зря вы сдались. Можно же вводить иероглифы средствами рукописного ввода.
Kobalt_x
Чтобы получить распознаваемые иероглифы в таком вводе, нужно знать хотя бы порядок радикалов. Иначе получается что-то вообще нераспознаваемое
Miketsukami
Есть системы ввода иероглифов, у которых порядок опционален.
У меня на смартфоне словарь кандзи с отключаемым порядком радикалов, к примеру.
Iqorek
Лайфхак, на гуглотрасляторе можно нарисовать иероглифы и оно их неплохо распознает
erwin_shrodinger
Правильно ли я понял, зло оно потому что оператор накосячил и у них не очень удобный фидбек?
evil_me Автор
В том числе.
Еще они, вроде как, позиционируются как глобальная программа, но в целом юзер-френдли только для китайцев.
erwin_shrodinger
думаю, что это всё решится со временем
evil_me Автор
Потихоньку появляется перевод на английский у основных разделов, но формы ввода пока китайские.
Хотя я просто надеюсь, что мне не придется больше пользоваться этим сервисом.
GeorgWarden
Зачем китайцам делать что-то для кого-то, кроме китайцев? Китай — это как параллельная вселенная, только рядом
evil_me Автор
Полагаю затем, что они уже давно делают вещи для всего мира?)
GeorgWarden
Они делают для себя, а все почему-то думают, что для всего мира
JekaMas
Истина! Сталкиваюсь с алибаба — так все и есть. Китай только начинает открывать для себя чудной внешний мир.
VioletGiraffe
Для этого в мобильном Google Translate есть перевод по фото и режим дополненной реальности :)
evil_me Автор
Вы знаете, я пробовал какие-то программы в процессе. Но все они работали настолько плохо, что я прям расстроился и решил действовать дедовским методом :)
stepmex
Для этого уже давно есть решение: chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb
Выделяешь текст и он автоматически переводится с любого языка.
evil_me Автор
Спасибо за ответ. Только я не могу придумать, как выделить текст в выпадающем списке. Подскажете?
NoOne
Использовать Google Translate и камеру на телефоне :)
Я так удалял китайский антивирус с ПК знакомых.
stepmex
Я понимаю что это не панацея. И с выпадающими списками она поможет только в комплекте с кодом страницы.
Данное расширение убирает необходимость ходить и копировать текст в переводчик.
Чем экономит кучу времени.
evil_me Автор
Так в хроме уже есть встроенный переводчик по правому клику на странице.
DC_Offset
Можно открыть список и нажать Ctrl+A :) Не знаю, везде ли сработает, но на хабре работает.
evil_me Автор
То расширение выше умеет переводить весьма ограниченный объем выделенного текста. Не думаю, что «вся страница» — рабочий кейс для него.
stepmex
Выделяете текст и тыкаете в иконку приложения, тогда переводить любой объём.
«Локальный» перевод ограничен по длине.
nidalee
Да, конечно. Открываете список, включаете приложение на телефоне, делаете фото и пальцем проводите по нужному фрагменту. Иероглифы выделяются и переводятся. Можно выделить часть предложения, если символы разбиты на группы, либо сразу все — без разницы.
Я так сотни раз переводил интерфейсы японских VN. Жаль, только, что нет десктопного приложения, которому можно просто скормить скриншот. Разве что с эмуляторами… Развлекаться.
nidalee
Пардон, вы про расширение, а я про приложение.
gmikhail94
+1 голос за мобильное приложение Google Translate. Работает даже с выпадающими списками: imgur.com/a/HhCo4
sergof
izzholtik
Нужно не отрывать кончик, а разламывать пополам!
awesome_walker
Ну тут инструкции хотя бы не на китайском языке :)
krak
В какой версии MIOI был баг и в какой исправили?
evil_me Автор
MIUI 8 Global 7.3.30
Исправили в следующем апдейте, который прилетал по воздуху, но извините, я не помню номер.
ket4upstar
Что еще раз подтверждает что пока не тыкнешь их носом никто не признает ошибку, и изначально будут пытаться «отмазаться» стандартным ответом. Работал в поддержке, знаю суть работы. Везде одинаково.
evil_me Автор
Так, вроде, не только в поддержке делают :)
pyrk2142
Китайские Bug Bounty иногда странные (в том числе, и из-за языка), но мне они обычно платили. Правда иногда любят не признавать уязвимость проблемой и перестать на нее реагировать.
А вот другая история, как я участвовал в Bug Bounty от Telegram: полгода назад отправил несколько уязвимостей (разные проблемы в приложениях), один раз ответили, что «разработчики посмотрят», после этого они не отвечают на мои сообщения вообще. И не посмотрели, уязвимости все еще живы.
evil_me Автор
Так проблемы в приложениях или уязвимости?
Не думаю, что если бы там были критические дыры или что-то похожее, они отложили бы это в долгий ящик.
Напишите об этом.
pyrk2142
По классификации OWASP это уязвимости, другие компании подобные вещи закрывают. Хотел написать на этой неделе, но не успел. Надеюсь, что напишу на следующей.
Isis
В твиттере реагируют быстро, даже сам СЕО. Только вот потом награды не будет :)
awesome_walker
Я подумал, что вам не только не досталась награда, но еще и что-то очень плохое вам сделали за обнаружение бага.
w9w
«кликбейтный» заголовок)
ket4upstar
Да, заголовок заинтриговал.
esudnik
Мда,… думаю что здесь даже потраченное время на заполнении различных бюрократических анкет себя не оправдало при такой награде. На черном рынке вы бы однозначно больше получили за находку такой серьезной уязвимости.
evil_me Автор
Поделитесь контактами черного рынка?)
esudnik
вот активные покупатели: www.nsa.gov
evil_me Автор
Поверю вам на слово :)
ChiefPilot
Спасибо Вам за статью! Понравилось описание процесса общения — как будто фантастический рассказ прочёл про общение с инопланетянами. :)
evil_me Автор
Спасибо за комментарий!
Как верно заметили выше, это немного другой мир, в котором нам еще разбираться и разбираться :)
mr_tron
5000 рублей. Меньше 100 баксов за уязвимость на повышение привилегий. Имхо это даже круче, чем вконтактик, который дал всего 3000 баксов за возможность залогиниться любым пользователем. Вот и участвуй после этого в официальных баг баунти. Какой-нить zerodium вполне возможно заплатил бы на порядок больше. Судя по прайсу zerodium.com/program.html можно расчитывать до 15000$ (хотя непосредственно за такую багу врядли).
mike_y_k
Первый блин сразу получился. Стоит продолжить писать. Спасибо ;)
А тема общения с поднебесной и на ее ресурсах тема для многотомной серии в духе Физики шутят. Что не история, то перл
Psychosynthesis
Ну кстати зря вы лампу взяли =)
У меня такая лампа была привязана к аккаунту, и приложение стояло на старом мобильнике. Когда поменял трубку, поставил на новую приложение, вошёл в аккаунт, сбросил лампу и попытался привязать её к новому приложению. Собственно, на этом моменте лампа перестала быть умной и перестала привязываться куда-либо. Тех.поддержка вообще меня проигнорила с этой проблемой. Так что теперь у меня тупая светодиодная лампа за 1500.
evil_me Автор
Наверное, вы сделали что-то не так.
Прошел ту же процедуру (менял телефон практически в самом начале эксплуатации) — полет нормальный.
Psychosynthesis
Вы извините, но если в простейшей процедуре что-то можно сделать не так, значит что-то не так с процедурой.
Если устройство не обеспечивает достаточной повторяемости своих функций в процессе эксплуатации — значит устройство мусор.
Ну и, к слову, там ошибиться-то особо негде — отвязал в старом приложении, сбросил, привязал к новому. Где тут можно ошибиться?
evil_me Автор
Сервер, например, не тот выбрать.
Psychosynthesis
А почему на них разные данные? Меня как пользователя почему вообще должно заботить какой там сервер где находится? Неужели как-то синхронизацию настроить было нельзя?
В любом случае, это не имеет значения — я пробовал оба. Даже пробовал новый акк заводить и с него тоже пробовал оба сервера.
evil_me Автор
Я вам точно не отвечу на эти вопросы.
А серверов там восемь. От них (и соответственно, локали) зависит то, как будет выглядеть Mi Home, и какие устройства будут доступны для подключения.
Psychosynthesis
В моём случае речь про YeeLight, и серверов там таки всего два.
А на вопросы вообще никто отвечать не собирается — поддержка успешно игнорит сообщения на двух языках.