Привет. Я тот, кто полгода назад получил логины и пароли Киевстара от таких важных сервисов, как: JIRA, Amazon Web Services, Apple Developer, Google Developer, Bitbucket и многих других, зарепортил их по Bug Bounty и получил 50 долларов различные комментарии к репостам моей публикации.
Например:
Спасибо вам за поддержку и комментарии! Итоги голосования:
На некоторые комментарии я по тем или иным причинам тогда не ответил, но не могу не ответить сейчас.
Напомню, что мне случайно пришло письмо с закладками из рабочего браузера сотрудника Киевстар. Я по очереди открыл все 113 закладок и обнаружил среди них файл с названиями сервисов, логинами и паролями и другой информацией. Да, файл находился на Google Docs с правами доступа «Для всех».
Когда мой коллега Егор Папышев поделился своим мнением в Facebook, было неприятно услышать, как другой уважаемый человек (Владимир Стыран, специалист по информационной безопасности — CISSP, CISA, OSCP, CEH), был негативно настроен к ситуации, и писал Егору, что тот не знает деталей и не разобрался в ситуации.
При этом Владимир и сам не разобрался в ситуации. Вот его насмешливый пост:
Я переведу и прокомментирую несколько последних пунктов:
Впрочем, как мне стало известно, Владимир участвовал в запуске Bug Bounty компании Киевстар, поэтому я допускаю, что у него замыленный глаз.
Идём дальше. Простой пример: Apple Developer, скриншоты их консоли вы видели в моём посте.
В файле с паролями были ещё строки и колонки, и конкретно по Apple было указано следующее: Last modified — 18.05.2016.
Т.е. последний раз данные учётки разработчика Apple редактировались ещё в мае 2016-го — более, чем за год до получения мной письма и нахождения в нём ссылки. Что, опять-таки, подтверждается тем фактом, что я смог войти с указанным паролем.
Таким образом, говоря про безопасность бизнес-процессов в Киевстаре, можно подытожить:
Что ещё. Многие так и не поняли, почему была указана такая странная сумма в $5800, почему не $6000 ровно, почему сразу не миллион долларов? — «По его мнению, лишь официальная стоимость аккаунтов превышает $5800».
Ответ на этот вопрос был с самого начала на Хабре, его попросту не заметили:
Ключевое здесь "откройте его в новой вкладке" — при нажатии на изображение (прямая ссылка) открывалась полная картинка, где также видны другие колонки: Last modified, Paid till (date), Need till (date), Project (as in ASUP), Type of payment, Cost, Currency.
Путём простого суммирования цифр из колонки «Cost» мной и была получена цифра в $5800 — это официальная (а не придуманная мной) стоимость аккаунтов в перечисленных сервисах, которую я указал в отчёте на Bugcrowd.
Я не просил и не требовал ни эту сумму, ни любую другую, как тогда соврал Soultan, а сравнил указанное их вознаграждение в $50 с минимальным возможным ущербом — попросту говоря, с потерей доступа к сервисам, на покупку которых они потратили >$5800.
Далее.
Выделенную выше информацию я дописал небольшим апдейтом к первоначальному посту. Я не злорадствую по этому поводу. Они совершили тогда ошибку — возможно, расплачиваются.
pyrk2142 в комментариях спросил:
И сейчас я могу ответить, что да, информация по Bug Bounty Киевстара неактуальна: я нашёл возможность получать информацию о покупках людей, проходящих через платёжные сервисы Киевстара, даже если те не являются его клиентами. Я дал компании второй шанс — но она им не воспользовалась.
Итак, инфо о покупках, проходящих через сервисы Киевстара, по картам даже не_клиентов последнего.
Во время тестирования приложения одной компании я обнаружил, что Киевстар выступает как платёжный провайдер в рамках сотрудничества с Visa QR Payments — mVisa — оплаты с помощью QR-кода идут через qrpayments.kyivstar.ua.
Это транзакции клиентов в таких торговых точках, как, например:
Пример полученных данных:
Сервис отвечал на запросы только с корректными «Authorization» и «Map-AuthToken», последний из которых содержал закодированные в Base64
Но несмотря на необходимость наличия в запросе корректных параметров, указанных выше, единожды получив Map-AuthToken, дальше можно было выполнять GET-запросы на адрес вида https://qrpayments.kyivstar.ua/map/api/consumers/ множество раз.
И хотя всего за период с момента запуска, 16.04.2018, было осуществлено не так много операций (~2000 шт.) и сами полученные данные некритичны, такая ситуация настораживает:
даже если вы не пользуетесь Киевстаром, а просто платите в магазине Auchan картой банка Bank, хакеры могут взломать провайдера KC и получить о вас информацию.
В сфере платёжных карт есть подходящая по описанию ситуация: единая точка компрометации — это может быть терминал, банкомат, торговое предприятие, эквайер, процессинговый центр, через который были хищения с разных карт разных клиентов.
Перенося ситуацию на данного мобильного оператора: взломав один сервис, вы можете получить информацию из нескольких.
Перед публикацией этого материала я дал Киевстару второй шанс — отправил три письма по адресу bounty@kyivstar.net, который указан у них на специальной странице: 17-го декабря, 20-го декабря и 27-го декабря, всё рабочие дни.
Отправлял, на всякий случай, с ящика, который не был указан в ситуации с утекшими паролями. Письма получены, но никакой обратной связи, даже автоматического ответа, не последовало.
Как вы понимаете, уязвимость не прикрыта, поэтому больше подробностей я указать не могу. Впрочем, всё и так понятно.
Например:
- Собственно, Хабр, 33 тысячи просмотров, 188 комментариев: Bug Bounty Киевстара: награда за админский доступ к сервисам Jira, AWS, Apple, Google Developer, Bitbucket — 50 долларов
- AIN.UA, 12 тысяч просмотров: Тестировщик получил доступ к корпоративным сервисам Киевстар. Ему предложили всего $50
- ITC.ua, 350 комментариев: «Киевстар» предложил пользователю $50 за найденные пароли к корпоративным системам, тот остался недоволен
- Ebanoe.IT, 26 тысяч просмотров, 169 комментариев: Хакеру всунули подачку 50$ за найденную уязвимость в системе Киевстар
Спасибо вам за поддержку и комментарии! Итоги голосования:
На некоторые комментарии я по тем или иным причинам тогда не ответил, но не могу не ответить сейчас.
Напомню, что мне случайно пришло письмо с закладками из рабочего браузера сотрудника Киевстар. Я по очереди открыл все 113 закладок и обнаружил среди них файл с названиями сервисов, логинами и паролями и другой информацией. Да, файл находился на Google Docs с правами доступа «Для всех».
У меня были опасения в их будущей реакции на репорт, поэтому
Сперва на Bugcrowd я сообщил, чтобы они срочно поменяли пароли. Мне ответили, что знают про индексацию файлов из поста на Хабре и уже закрыли везде такие файлы.
Я указал, что не закрыли, и прислал скриншоты, где видно, что я смог войти рандомно в их учётки.
Затем меня спросили, как я получил такие данные, и я указал, как (получил на e-mail).
Потом спросили, как я смог получить такой e-mail — и я ответил, что я везунчик, или просто сотрудница опечаталась, когда отправляла закладки себе (так и оказалось в итоге).
В процессе переписки моему сигналу был присвоен наивысший приоритет — P1 (Sensitive Data Exposure: Critically Sensitive Data — Password Disclosure), в рамках которого выплаты составляют от $1000 до $3000 (а ещё можно сложить Mobile + WEB apps).
Ну а дальше вы знаете.
Я указал, что не закрыли, и прислал скриншоты, где видно, что я смог войти рандомно в их учётки.
Затем меня спросили, как я получил такие данные, и я указал, как (получил на e-mail).
Потом спросили, как я смог получить такой e-mail — и я ответил, что я везунчик, или просто сотрудница опечаталась, когда отправляла закладки себе (так и оказалось в итоге).
В процессе переписки моему сигналу был присвоен наивысший приоритет — P1 (Sensitive Data Exposure: Critically Sensitive Data — Password Disclosure), в рамках которого выплаты составляют от $1000 до $3000 (а ещё можно сложить Mobile + WEB apps).
Ну а дальше вы знаете.
Когда мой коллега Егор Папышев поделился своим мнением в Facebook, было неприятно услышать, как другой уважаемый человек (Владимир Стыран, специалист по информационной безопасности — CISSP, CISA, OSCP, CEH), был негативно настроен к ситуации, и писал Егору, что тот не знает деталей и не разобрался в ситуации.
При этом Владимир и сам не разобрался в ситуации. Вот его насмешливый пост:
Я переведу и прокомментирую несколько последних пунктов:
- Если ты не в курсе, что обжаловать сумму выплаты тебе мог помочь саппорт брокера, через которого ты сообщил вендору багу, потому что вообще-то это одна из его ролей в ваших трехсторонних отношениях, это называется лохануться. — Саппорт Bugcrowd в переписке со мной неоднократно поддерживал моё мнение и мнение большинства, что Киевстар неправ и должен был выплатить больше. «Брокер» не смог повлиять на оператора. И лоханулся тут не я.
- Если ты начинаешь угрожать вендору Full Disclosure в случае не увеличения выплаты, это называется вымогательство или шантаж. Но скорее всего это назовут вымогательством, потому что за шантаж в кодексе нет статьи. — Шантажа и вымогательства не было. Угроз не было. Владимир знал бы об этом, если бы читал тот отчёт. Что характерно, мой аккаунт на Bugcrowd заблокировали (это нестрашно) не сразу после выхода поста на Хабре, а где-то через неделю, как раз одновременно с другим его едким постом в FB.
- Если же у тебя нет бага, ты прочитал о нем на Хабре, ты рассказал о нем у себя на странице в Фейсбуке, чтобы получить N лайков и + M фолловеров, то ты блоггер и тут нечем гордиться. — Тут и добавить нечего.
Впрочем, как мне стало известно, Владимир участвовал в запуске Bug Bounty компании Киевстар, поэтому я допускаю, что у него замыленный глаз.
Идём дальше. Простой пример: Apple Developer, скриншоты их консоли вы видели в моём посте.
В файле с паролями были ещё строки и колонки, и конкретно по Apple было указано следующее: Last modified — 18.05.2016.
Т.е. последний раз данные учётки разработчика Apple редактировались ещё в мае 2016-го — более, чем за год до получения мной письма и нахождения в нём ссылки. Что, опять-таки, подтверждается тем фактом, что я смог войти с указанным паролем.
Таким образом, говоря про безопасность бизнес-процессов в Киевстаре, можно подытожить:
- мало того, что логины и пароли хранились (или хранятся?) на внешнем общедоступном ресурсе Google Docs с правами доступа «Для всех»,
- мало того, что для входа не требуется двухфакторная аутентификация,
- мало того, что многие пароли были словарными и легко подбираемыми и имели вид (изменено) upsups92, suchapassword, DigitTeam2017, Digital2016, Kyivstardigteam2017, ks-anya$bd2016, KSDigit2018,
- так эти пароли ещё и не менялись больше года.
Что ещё. Многие так и не поняли, почему была указана такая странная сумма в $5800, почему не $6000 ровно, почему сразу не миллион долларов? — «По его мнению, лишь официальная стоимость аккаунтов превышает $5800».
Ответ на этот вопрос был с самого начала на Хабре, его попросту не заметили:
(для увеличения изображения откройте его в новой вкладке)
Ключевое здесь "откройте его в новой вкладке" — при нажатии на изображение (прямая ссылка) открывалась полная картинка, где также видны другие колонки: Last modified, Paid till (date), Need till (date), Project (as in ASUP), Type of payment, Cost, Currency.
Путём простого суммирования цифр из колонки «Cost» мной и была получена цифра в $5800 — это официальная (а не придуманная мной) стоимость аккаунтов в перечисленных сервисах, которую я указал в отчёте на Bugcrowd.
Я не просил и не требовал ни эту сумму, ни любую другую, как тогда соврал Soultan, а сравнил указанное их вознаграждение в $50 с минимальным возможным ущербом — попросту говоря, с потерей доступа к сервисам, на покупку которых они потратили >$5800.
Далее.
Если кому интересно, не так давно программа BugBounty Киевстара была закрыта полностью (не приватный режим, а именно закрыта), а сотрудник Soultan, который отвечал здесь на комментарии, не так давно ушёл из Киевстара.
Кстати, в комментариях под его прощальной записью об уходе из компании ему пишет «В добрый путь, Виталий!» сотрудница, которая и отправила тот злосчастный e-mail. Такие дела.
Выделенную выше информацию я дописал небольшим апдейтом к первоначальному посту. Я не злорадствую по этому поводу. Они совершили тогда ошибку — возможно, расплачиваются.
pyrk2142 в комментариях спросил:
Это достаточно неожиданно. Получается, что информация здесь больше не актуальна?
И сейчас я могу ответить, что да, информация по Bug Bounty Киевстара неактуальна: я нашёл возможность получать информацию о покупках людей, проходящих через платёжные сервисы Киевстара, даже если те не являются его клиентами. Я дал компании второй шанс — но она им не воспользовалась.
Итак, инфо о покупках, проходящих через сервисы Киевстара, по картам даже не_клиентов последнего.
Во время тестирования приложения одной компании я обнаружил, что Киевстар выступает как платёжный провайдер в рамках сотрудничества с Visa QR Payments — mVisa — оплаты с помощью QR-кода идут через qrpayments.kyivstar.ua.
Это транзакции клиентов в таких торговых точках, как, например:
- Crema Caffe, Kyiv,
- Smachno, Kyiv,
- Third Floor Cafe, Kyiv — первые и чаще всего операции были именно здесь. По всей видимости, это кафе на 3-м этаже в офисе Киевстара, где и начали тестирование QR-оплат;
- Auchan, Kyev,
- Auchan, Lviv,
- Auchan, Dnipropetrovska — сеть гипермаркетов Ашан (Украина);
- mVisa merchant;
- GIVC, Kiev — ГИВЦ, Главный информационно-вычислительный центр, Киев. Здесь происходят начисления и расчёты за большинство коммунальных платежей жителей Киева;
- GERC, Odesa — ГЕРЦ, Городской единый расчётный центр, Одесса. Аналогично ГИВЦ выше, только охват ещё больше: сайт предназначен не только для населения Одессы, но и для таких городов, как: Киев, Белгород-Днестровский, Рени, Черноморск и Южный;
- и пр.
Пример полученных данных:
{"Id":1305 Date:"2018-10-05T15:15:42.3921295" State:0 Amount:-1278.8100 TipsAmount:0.0000 Currency:"UAH" MerchantName:"Auchan" MerchantCity:"Lviv" MerchantId:"4109499405597549" ApprovalCode:"516634" ReferenceNumber:"" CardNumber:"5375XXXXXXXX3858"}
{"Id":1308 Date:"2018-10-06T12:43:31.1179667" State:3 Amount:-4192.9700 TipsAmount:0.0000 Currency:"UAH" MerchantName:"Auchan" MerchantCity:"Kyev" MerchantId:"4109494835704666" ApprovalCode:"" ReferenceNumber:"827991150697" CardNumber:"4824XXXXXXXX6937"}
{"Id":1702 Date:"2018-12-06T18:40:02.657213" State:3 Amount:-81.0000 TipsAmount:0.0000 Currency:"UAH" MerchantName:"GIVC" MerchantCity:"Kiev" MerchantId:"4109499632222754" ApprovalCode:"605231" ReferenceNumber:"834091189417" CardNumber:"5168XXXXXXXX9997"}
Сервис отвечал на запросы только с корректными «Authorization» и «Map-AuthToken», последний из которых содержал закодированные в Base64
{"alg":"RS256","kid":"33E283272B0433E283281FF404CA6F031E28320","typ":"JWT"}{"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/mobilephone":"0800300466", "http://schemas.lime-systems.com/identity/claims/authId":"1199333", "http://schemas.lime-systems.com/identity/claims/userId":"25046", "http://schemas.lime-systems.com/identity/claims/deviceId":"12342", "nbf":1541370000, "exp":1541380001, "iat":1541390001, "iss":"http://localhost", "aud":"http://localhost"}
и другие данные.Но несмотря на необходимость наличия в запросе корректных параметров, указанных выше, единожды получив Map-AuthToken, дальше можно было выполнять GET-запросы на адрес вида https://qrpayments.kyivstar.ua/map/api/consumers/ множество раз.
И хотя всего за период с момента запуска, 16.04.2018, было осуществлено не так много операций (~2000 шт.) и сами полученные данные некритичны, такая ситуация настораживает:
даже если вы не пользуетесь Киевстаром, а просто платите в магазине A
В сфере платёжных карт есть подходящая по описанию ситуация: единая точка компрометации — это может быть терминал, банкомат, торговое предприятие, эквайер, процессинговый центр, через который были хищения с разных карт разных клиентов.
Перенося ситуацию на данного мобильного оператора: взломав один сервис, вы можете получить информацию из нескольких.
Перед публикацией этого материала я дал Киевстару второй шанс — отправил три письма по адресу bounty@kyivstar.net, который указан у них на специальной странице: 17-го декабря, 20-го декабря и 27-го декабря, всё рабочие дни.
Отправлял, на всякий случай, с ящика, который не был указан в ситуации с утекшими паролями. Письма получены, но никакой обратной связи, даже автоматического ответа, не последовало.
Как вы понимаете, уязвимость не прикрыта, поэтому больше подробностей я указать не могу. Впрочем, всё и так понятно.