Common 1
Что проверяем
Запросы OAuth
Привязка code
Привязка token к сессии без CSRF (в данном случае это или code или nonce, в зависимости от реализации)
redirect_uri
Настроены ли белые списки для этого параметра (можно ли запросить OAuth ссылку со своим redirect_uri)
Как происходит валидация этого параметра
Обращение к данным без токенов (IDOR); использование скрытых эндпоинтов (private api) без токенов
Передача ролей и разрешений (permissions) как часть запросов — можем ли на это влиять
Еще что проверяем
Соответствие code и scope
На стороне сервера должна идти перепроверка соответстия code grant и type grant scope (возможно ситуация, при которой пользователь предоставил доступ только к email, а злоумышленник отправляет на сервер, предоставляющий доступ по коду, полученный код от пользователя и доставляет доп scope. Если сервер не может перепроверить соотв кода и скопа — это плохо)
Проверять куда отправляет code c redirect_uri
Прикольную вулну увидел у одного из заказчиков (не я нашел, я не обратил внимания): В веб-приложении присутствует OAuth авторизация через сторонний сервис. Они в redirect_uri проставляют на локальную страницу ссылку (например, /page) для получения кода А на /page присутствует запросы к разного рода аналитике (например, Google Analytics) Так в итоге, когда через OAuth присылается код, то со страницы /page происходят запросы к аналитике, и туда через Referer утекают коды на сторону
Mitigation:
Использовать в качестве параметра
redirect_uri
URL, не содержащий ссылок на сторонние ресурсы.Ограничить отправку заголовка
Referrer
на сторонние ресурсы с помощью заголовкаReferrer-Policy
.
Не допускать повторение идентификационных данных
Сервер аутентификации, через который осуществляется авторизация OAuth, должен проверять вводимую пользователем информацию (запускать процесс подтверждения и тп), чтобы злоумышленник не мог зарегистрировать аккаунт с теми же идентификационными данными
Last updated