×Закрыть

Краш-тест Uklon: как компания проверила себя хакерской атакой и что из этого вышло

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

В начале октября наша команда решила углубиться в вопросы кибербезопасности сервиса. Мы хотели проверить, остались ли дыры в системе после масштабного аврала длинной в 8 месяцев. Именно в этот момент нас «хакнули».

Рассказать всего я не могу, потому что хакнули нас по нашей же просьбе 25 этичных хакеров во время Hacken Cup, с которыми мы подписали NDA. Решение доверить часть внутренней информации высококвалифицированным хакерам из разных частей света, чтобы те устроили краштест Uklon, оказалось правильным и полезным для компании. В этой колонке я раскрою несколько кейсов, обнаруженных во время хакерской атаки Uklon.

Первый кейс с Self XSS до Reflected XSS

Ключевая проблема заключалась в том, что сообщение об ошибке при неверном адресе, которое выводилось в всплывающую подсказку, содержало пользовательский ввод почти «как есть» без фильтрации спецсимволов. (Скриншот 1). В данном примере получилось поднять уровень уязвимости с низкой критичности (Self XSS) до средней критичности (Reflected XSS).

Ошибка позволяла:

  • Скомпрометировать логин и пароль пользователя (keylogger)
  • Заменить главную страницу сайта на другую
  • Украсть сессию пользователя
  • Разместить ложные уведомления\изображение\рекламу

Второй кейс IDOR. Удаление и редактирование изображений других водителей

Любой партнер Uklon на сайте мог взаимодействовать с фотографиями в личном кабинете. При вводе запроса:

DELETE /driver/service/removeimage HTTP/1.1 
Host: partner-staging.uklon.com.ua 
Connection: close 
Content-Length: 63 
appuid: a306fc19-d7f2-4bbf-95ef-1a68c886d5b5 
Origin: https://partner-staging.uklon.com.ua 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
X-Requested-With: XMLHttpRequest 
clientid: 6289de851fc726f887af8d5d7a56c635 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.9 
Cookie: your cookie

imagetype=driveravatar&uid=7890b85e-aa8c-4ae9-8e13-fbb1c30a1fc3

Появляется возможность заменить аватар водителя (с типом driveravatar и уникальным идентификатором uid=7890b85e-aa8c-4ae9-8e13-fbb1c30a1fc3).

А заменив uid на идентификатор другого водителя, у нас успешно получилось удалить аватар другого пользователя.

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

Кейс третий IDOR. Редактирование чужих комментариев

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

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

Это осуществимо при замене ID на ID чужого комментария. Также можно заметить, что ID не уникален, а простой инкремент числа. Отправляя этот запрос с повышением ID на +1, мы можем удалить все отзывы о всех водителях ID=1 ID=2 ID=3...

Также были найдены другие запросы:

  • PUT /api/v1/feedbacks — редактирование и создание комментариев от других пользователей
  • GET /api/v1/drivers/f0994a5dbf5f4b58afd7fbf2a804765f/feedbacks — получение отзывов о других водителях (нужно знать его ID)

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

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Судя по результатам и вашим комментариям, вам нужно внедрять SDLC — Secure Development Lifecycle и начинать задумываться о безопасности на всех этапах разработки — от проектирования до релиза и эксплуатации. Пентестеры находят крупицы, стоят дорого и не дают гарантии, что самые серьезные ошибки найдены.

В идеале, построить свою Application Security команду, купить SAST и DAST tools и внедрить их в CI/CD. Заниматься тренингом разработчиков хотя бы базируясь на октрытых ресурсах (таких как OWASP). Проводить моделирование угроз (Threat Modeling) на этапе дизайна. Сделать пентесты регулярными и найти хорошего провайдера для этого сервиса, отобрать консультантов для теста и проводить его только имея четко определенный scope.

Также, исходя из классификации XSS из первого примера как medium, можно подумать о Vulnerability Management program и выработать четкие гайдлайны для оценки уязвиомстей. Я бы сказал что все Stored XSS и многие Reflected XSS — это как минимум high severity, а иногда — Crirical. Все зависит от business value конкретного компонента, который эта уязвимость компрометирует.

Хорошо, что исправили эти моменты, а вот желающий прохожий может себе набрать истории поездок каждого клиента?
Кто постоянно ездит бизнес-классом — заглянуть к нему в гости, не забыв взять пистолет.
Или уже вот прямо сейчас исправляете?
Про хранение номеров карт и спрашивать страшно..

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

Не звертайте уваги на гнівні коментарі. І не треба нікого звільняти. Не помиляється лише той, хто нічого не робить.

Круто, що наважилися на такий захід, круто, що знайшли на нього ресурси і круто, що не побоялися це опублікувати.

Дякую, Ігоре. Ходили за свіжим поглядом, ми його отримали. Більш підготуємося на отриманих помилках і спробуємо запустити багбаунті наступним кроком.

Кстати, не советую запускать багбаунти до того, как построен хотя бы минимальный SDLC (один из примеров — www.microsoft.com/en-us/sdl). Вы получите сотни репортов, потратите много времени на их анализ, а потом программистам просто некогда будет их фиксить. Нужно будет как-то приоритизировать, что само по себе сложно, если не построены четкие критерии — как какие уязвимости грейдить, как фиксить, в какой промежуток времени, как внедрять знания, чтобы этого не повторяось итд.

Верните старый интерфейс приложения!!!!1!

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

Если он перестанет быть похож на неудачный клон таксифай со сменой введенного адреса при уточнении места подачи на карте — с удовольствием попробую. А пока буду очень благодарен за старый Android, спасибо

ваш номер в черном списке. ок — удалить приложение. продолжайте и дальше поддерживать водил на литве

Я бы тебя из-за одной аватерки в профиле кинув в чс. )

Кейзи 2-4 — це навіть не дитячі, а рідкісно уй*банські помилки, які навіть для студентів не дозволені, хіба що школота може таке писати.

Як на мене, то не перевірити іденетифікацію та виконати будь-який зовнішні запит «на авось» — за це треба звільняти негайно, нехай ідуть в Індію чи Китай, там таке полюбляють.

Зробіть кнопку «завершити поїздку» бо ваш машин льорнінг не викупає скільки часу займає поїздка і в мене нотифікашка «машина знайдена» висить ще півгодини після того як я приїхав, розплатився та вийшов з машини. І нотифікашку цю не можна забрати.

Писав вам на саппорт але мені якусь відписку прислали. Реально я не розумію чи апп завис чи я не туди тикнув чи що.

Як вже не працюють алгоритми то зробіть тупу кнопку, юзер сам знає коли він приїхав. Заодно підтюните ваші алгоритми на реальних даних.

Бэкэндщика уже уволили?

Ну ладно. Но потом сжечь!

Ошибки детские какие-то.

Какой это IDOR, если это чистый broken access control (OWASP 2017 A5)?

лучше бы приложуху мобильную пофиксили, и не релизили бы крешающий шлак

Подписаться на комментарии