Перевод: Неправильная конфигурация API - отсутствие SwaggerUI
@Ent_TranslateIB
Резюме
Неправильная конфигурация API означает неправильную или небезопасную настройку интерфейса прикладного программирования (API). Это может включать такие проблемы, как слабая аутентификация, отсутствие проверки ввода или неправильный контроль доступа.
Неправильная настройка API может предоставить злоумышленнику несанкционированный доступ к конфиденциальным данным или возможность выполнять действия от имени пользователя. Это может привести к утечке конфиденциальных данных, компрометации системы и другим проблемам безопасности.
Описание
Я обнаружил неправильную конфигурацию API в конечной точке SwaggerUI в одном из веб-приложений в частной программе. Она приводила к утечке токена авторизации в локальное хранилище веб-приложения, которое я использовал для поиска конфиденциальной информации пользователей на сайте. Однако при исследовании запросов с помощью доступа к конечной точке SwaggerUI он выдал мне ошибку "Unauthorized, Full authentication is required to access", и одна вещь, которая привлекла мое внимание, это заголовок WWW-Authenticate с начальным значением Bearer в ответе, что означает, что будет использован заголовок запроса авторизации с начальным значением Bearer.
Я начал искать токен в запросах, но не нашел его, тогда я начал искать токен в cookies, localstorage и sessionstorage и обнаружил, что токен авторизации хранится в localstorage приложения. Я скопировал токен и использовал его в запросе, затем изменил {serviceIdentifier} на 1 и смог перечислить список пользователей, который содержал данные о сотруднике: имя, фамилию, id сотрудника, email, название отдела и номер телефона.
Что такое SwaggerUI?
Swagger UI - это удобный интерфейс для отображения и тестирования конечных точек RESTful API, определенных с помощью спецификации OpenAPI. Он позволяет разработчикам легко взаимодействовать с API и просматривать различные запросы и ответы в простом, интуитивно понятном формате.
Как я нашел эту уязвимость?
1. Я зашел на целевую конечную точку swaggerUI, перехватил запрос > отправил его в repeater и нажал на send.

2. Затем я нашел токен авторизации в локальном хранилище, щелкнув правой кнопкой мыши > Inspect > Storage > LocalStorage


3. Я скопировал токен авторизации из локального хранилища и вставил его в файл для использования в запросе

4. Затем я добавил заголовок Authorization с начальным значением Bearer, за которым следует токен авторизации

5. Я нажал на Send и получил данные о пользователе



Почему это произошло?
По моему мнению,
Есть две проблемы, которые привели к этой уязвимости
- Доступная конечная точка swaggerUI
- Слишком разрешительный токен авторизации
Влияние
Любой пользователь легко сможет получить доступ ко всей пользовательской информации, доступ к которой должен быть ограничен.
Рассчитанный CVSS
Векторная строка - CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:L
Оценка - 7.2 Высокая
Смягчение
Для этой проблемы применимы два способа исправления
- Ограничение конечной точки swaggerUI
- Предоставление соответствующих прав сгенерированному токену авторизации.
Приложение должно иметь два типа авторизации, один для обычного пользователя, другой для пользователя-администратора, и только токен пользователя-администратора должен иметь разрешение на доступ к деталям через конечную точку swaggerUI.
Оригинал статьи - здесь.
Поддержите автора хлопками на Medium.
Перевод статьи был выполнен проектом перевод энтузиаста:
- 📚 @Ent_TranslateIB - Телеграмм канал с тематикой информационной безопасности
- 🔥 @Ent_Translate - Инстаграм проекта