Уязвимость в приложении знакомств Bumble раскрывала точное местоположение пользователя

Инженер платежной компании Stripe Роберт Хитон выяснил, что приложение для онлайн-знакомств Bumble раскрывает точное местоположение любого пользователя.

robertheaton.comrobertheaton.com

Подобная уязвимость ранее содержалась и в Tinder. До 2014 года сервис вычислял расстояние между пользователями на их устройствах, что делало такой трафик уязвимым. После ряда инцидентов приложение начало обрабатывать всю информацию на своем сервере и округляло расстояния перед их отображением. Однако с помощью техники трилатерации исследователи подделали обновления местоположения в Tinder, перемещаясь по городу целевого пользователя. В каждой новой локации они спрашивали приложение, как далеко находится их жертва. В итоге исследователи нарисовали на карте три круга с центрами и радиусами, равными заявленным расстояниям до пользователя. Точка, в которой пересекались все круги, дала точное местоположение жертвы. Tinder исправил эту уязвимость, вычислив и округлив расстояния между пользователями на их серверах, и отправив своему приложению только эти полностью округленные значения.

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

Хитон предположил, что код приложения передает точное расстояние в функции math.round () и возвращает результат. Это делает возможной трилатерацию.

Инженер определил, что в коде сервера Bumble используется функция math.floor (), которая возвращает наибольшее целое число, меньшее или равное заданному значению. В итоге его метод сработал.

Чтобы неоднократно запрашивать недокументированный API Bumble, потребовались некоторые дополнительные усилия, в частности, отказ от схемы аутентификации запроса на основе подписи. Исследователи использовали Burp Suite как HTTP-прокси.

HTTP-запрос, который Bumble отправляет, когда пользователь выбирает кого-то:

POST /mwebapi.phtml?SERVER_ENCOUNTERS_VOTE HTTP/1.1
Host: eu1.bumble.com
Cookie: CENSORED
X-Pingback: 81df75f32cf12a5272b798ed01345c1c
[[...further headers deleted for brevity...]]
Sec-Gpc: 1
Connection: close

{
  "$gpb": "badoo.bma.BadooMessage",
  "body": [
    {
      "message_type": 80,
      "server_encounters_vote": {
        "person_id": "CENSORED",
        "vote": 3,
        "vote_source": 1,
        "game_mode":0
      }
    }
  ],
  "message_id": 71,
  "message_type": 80,
  "version": 1,
  "is_background": false
}

Запрос возвращает список размытых изображений, рядом с каждым показывается идентификатор пользователя:

image-loader.svg

{
  // ...
  "users": [
    {
      "$gpb": "badoo.bma.User",
      // Jenna's user ID
      "user_id":"CENSORED",
      "projection": [340,871],
      "access_level": 30,
      "profile_photo": {
        "$gpb": "badoo.bma.Photo",
        "id": "CENSORED",
        "preview_url": "//pd2eu.bumbcdn.com/p33/hidden?euri=CENSORED",
        "large_url":"//pd2eu.bumbcdn.com/p33/hidden?euri=CENSORED",
        // ...
      }
    },
    // ...
  ]
}

Как объяснил Хитон, подписи заголовков запросов Bumble генерируются в JavaScript, доступном в веб-клиенте Bumble, который также обеспечивает доступ к любым используемым секретным ключам.

image-loader.svg

Оттуда нужно было идентифицировать конкретный заголовок запроса (X-Pingback), несущий подпись; открыть файл JavaScript; определить, что код генерации подписи является просто хешем MD5; выяснить, что подпись, переданная серверу, является хешем MD5 комбинации тела запроса (данных, отправленных в Bumble API) и неясного, но не секретного ключа, содержащегося в файле JavaScript.

После этого Хитон смог сделать повторные запросы к Bumble API, чтобы проверить свою схему определения местоположения. Он сказал, что с помощью проверочного скрипта Python для запроса API на поиск цели потребовалось около 10 секунд.

Инженер сообщил о своих выводах Bumble 15 июня 2021 года. 18 июня компания внесла исправление. Хитон за описание уязвимости получил $ 2000.

В обсуждении пользователи вспомнили, что аналогичная уязвимость была и на сайте DeviantArt более 10 лет назад.

В 2020 году исследователи из организации Independent Security Evaluators обнаружили уязвимость в Bumble, которая позволяла узнать номер идентификатора каждого пользователя. Если учетная запись была подключена к Facebook, можно было даже узнать, каким записям и фото он поставил лайк. Кроме того, уязвимость позволяла злоумышленнику определить приблизительное местоположение интересующего его пользователя.

Это стало возможным благодаря тому, как работает API Bumble, который позволял перебирать все номера идентификаторов пользователей, просто добавляя единицу к предыдущему идентификатору.

© Habrahabr.ru