[Перевод] Давайте поговорим о шифровании и IDOR (да, снова IDOR)

69ad1c999818b2f47e60f7f1a45f2170.png

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

Находка: API с секретом

Все началось с веб-сайта, на котором хранятся пользовательские полисы — думайте о нем как о цифровом сейфе для страховых планов. Во время исследования я обнаружил обращение к API: /api/claims/encrypt? text=EUSP2386411060 с моим страховым полисом (EUSP2386411060). Ответом было зашифрованное значение идентификатора моего полиса, знание которого дает доступ к моему полису. Короче говоря, если ваш страховой полис EUSP2386411061, я могу зашифровать его и получить доступ к вашим данным, поскольку зашифрованное значение используется для доступа к PDF-файлу, содержащему информацию о вашем полисе.

Взлом: пошаговый разбор

Давайте рассмотрим как это работает, если идентификатором вашего полиса является EUSP2386401065.

Шаг 1: Шифрование идентификатора

С помощью простого HTTP GET запроса злоумышленник отправляет идентификатор полиса в конечную точку шифрования. Вот как это выглядит:

GET /api/claims/encrypt?text=EUSP2386401065 HTTP/2

Host: [redacted-]

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0

Accept: application/json, text/plain, /

Ответ? Аккуратная маленькая зашифрованная строка: BnmnNGD6EFL2Eeo85nTHA.

Шаг 2: Доступ к полису

Затем злоумышленник берет эту зашифрованную строку и добавляет ее к адресу: /api/certificates/policies/{encrypted_string_from_step_1} Вот так:

/api/certificates/policies/BnmnNGD6EFL2Eeo85nTHA

Буум! Появляется PDF-файл, отображающий детали вашего полиса EUSP2386401065. ФИО, дата рождения, адреса, но самое главное — дата и вид покупки, которые позволяют злоумышленнику пройти аутентификацию.

Шаг 3: Перехват контроля

Вот где всё становится по-настоящему жутким. Вооружившись идентификатором полиса и датой покупки из PDF, направляемся в портал управления сервисом. Выбираем «Номер полиса» в вариантах входа, вводим EUSP2386401065, затем выбираем «Дата покупки» и вводим дату из добытого полиса. И вот, мы получаем полный доступ — возможность управлять или даже перехватить полис.

Это не единичный случай. Идентификаторы полисов следуют числовой схеме, что означает: теоретически, можно зашифровать любой ID, получить его ключ доступа и повторить этот процесс для каждого пользователя в системе.

Шифрование как слабое звено

Так что же здесь происходит? Система использует один и тот же алгоритм шифрования для каждого идентификатора полиса, а зашифрованный результат служит ключом доступа. Нет никаких дополнительных проверок — ни секретного рукопожатия, ни второго фактора. Если вы сможете угадать или получить идентификатор полиса (а они идут последовательно), вы можете зашифровать его, получить ключ и свободно попасть в хранилище полисов. Это всё равно, что запирать сейф ключом, который хранится на нем.

Риски: почему это важно

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

Общая картина

Эта статья не для того, чтобы обвинять какую-либо конкретную компанию (именно поэтому некоторые сведения замаскированы). Это напоминание о том, как мы проектируем и обеспечиваем безопасность систем. Шифрование — мощный инструмент, но когда оно является единственным защитником — к тому же предсказуемым — его недостаточно. Последовательные ID, открытые конечные точки и слабые средства контроля доступа — рецепт беды.

Это напоминание: даже самая незначительная оплошность может превратить крепость в карточный домик. В следующий раз, когда вы доверите сервису свои данные, задайте себе вопрос — что мешает кому-то найти ключ?

Ещё больше познавательного контента в Telegram-канале — Life-Hack — Хакер

© Habrahabr.ru