Содержание статьи
- XSS
- Признаки уязвимости в OAuth + OIDC
- Общий вектор атаки, если есть XSS
- Манипуляции редиректом
- Какие признаки указывают на возможность redirect manipulations в OAuth/OIDC?
- Как выглядит общий вектор атаки на redirect в OAuth/OIDC?
- CSRF attack в Oauth 2.0 / OIDC
- Какие признаки указывают на возможность CSRF?
- Как выглядит общий вектор атаки CSRF в OAuth/OIDC?
- Гаджеты SSO. Атака dirty dancing
- Признаки возможности прерывания флоу авторизации
- Общий вектор атаки с применением dirty dancing
- OIDC. Манипуляции с acr_values
- Какие признаки указывают на возможность атаки acr_values manipulations?
- Как выглядит общий вектор атаки acr_values manipulations?
- OIDC. Discovery issues
- Признаки наличия discovery issues в реализации OIDC
- PKCE downgrade
- Какие признаки указывают на возможность PKCE downgrade?
- Как выглядит общий вектор атаки PKCE downgrade?
- Scope upgrade attack
- Какие признаки указывают на возможность scope upgrade attack?
- Общий вектор атаки scope upgrade
- Race conditions в OAuth/OIDC
- Какие признаки указывают на возможность race conditions в OAuth/OIDC?
- Общий вектор RP на OAuth/OIDC
- Redirect manipulations. 307 redirect exploit
- Какие признаки указывают на возможный 307 redirect exploit?
- Общий вектор 307 redirect exploit на SSO
- Гаджеты SSO. Утечка Referer header
- Какие признаки указывают на потенциальный Referer header leakage в SSO?
- Общий вектор эксплуатации Referer header leakage в SSO
- ID spoofing
- Признаки возможности эксплуатации ID spoofing
- Общий вектор атаки ID spoofing
- OIDC. Token type confusion (id_token или access_token)
- Признаки воспроизводимости token type confusion
- Общий вектор атаки при token type confusion
- Token recipient confusion
- Признаки воспроизводимости token recipient confusion в приложении
- Общий вектор атаки при token recipient confusion
- Техники pre-ATO в SSO
- Признаки воспроизводимости pre-ATO в SSO
- Общий вектор атаки pre-ATO в SSO
- Заключение
В этой статье собран перечень актуальных техник тестирования безопасности OAuth 2.0 и OIDC, которые можно использовать в тестировании реальных приложений. Для каждой техники будет кратко описано, что конкретно она собой представляет, по каким признакам можно понять, что атака возможна, и приведен общий вектор атак.
Этот перечень неуниверсальный и может не учитывать некоторые контекстуальные моменты, ошибки логики и прочие недостатки безопасности, которые сложно свести к общему вектору. Иначе говоря, список включает необходимые, но необязательно достаточные проверки в реализации протоколов.
Кроме того, в статье не будут обсуждаться базовые концепции протоколов и основное внимание будет направлено на веб‑приложения (приватные клиенты), которые чаще всего реализуют authorization code flow.
info
Подробнее о том, как используются и как работают OAuth 2.0 и OIDC, читай в статьях «OAuth от и до. Изучаем протокол и разбираем базовые атаки на OAuth» и «После OAuth. Разбираем атаки на OpenID Connect».
Ну и последнее предупреждение: статья будет раскрывать техники довольно поверхностно и без всех деталей, потому что замысел и объем материала такого не подразумевают. Основное внимание будет направлено на покрытие OAuth/OIDC максимальным количеством доступных техник. По возможности я оставлю ссылки на статьи и ресерчи, где тема раскрыта глубже.
Задача статьи — дать рабочий материал, показать, на что именно смотреть, какие сигналы могут указывать на недостатки в реализации протокола в веб‑приложениях.
Формат у списков с признаками воспроизводимости такой: признак наличия уязвимости → что с этим можно сделать.
Сокращения, которые используются в статье
- AS — Authorization Server. Сервер авторизации, где пользователь непосредственно аутентифицируется.
- IdP — Identity Provider. Еще одно название сервера авторизации, провайдер.
- OP — OpenID Provider. Провайдер авторизации, но в контексте OIDC.
- RP — Relying Party, клиентское приложение.
XSS
Сначала рассмотрим все случаи с XSS в приложении, которое реализует вход по OAuth/OIDC. Разумеется, речь пойдет о ситуациях, когда сессия недоступна через JavaScript, в противном случае это game over с ATO. Здесь речь идет о перехвате code с последующим обменом на токен.
Если в Origin клиентского приложения есть XSS или другой способ выполнить произвольный JavaScript, то это сразу может привести к ATO, даже если есть PKCE, потому что мы можем запустить флоу авторизации из родительского окна и нам будет доступен URL окна дочернего (в котором может содержаться код авторизации).
info
PKCE, по сути, делает одну вещь. Он дает возможность убедиться, что сторона, завершающая authorization code flow, и есть сторона, начавшая его. Это позволяет защититься от code injection/interception, поскольку одного значения code недостаточно для обмена его на токен, нужен еще code_verifier. Если в authorization request есть code_challenge, значит, используется PKCE.

Признаки уязвимости в OAuth + OIDC
- Есть уязвимость с выполнением JS в доверенном
Origin. - Используется любой
response_mode(fragment, query, web message response mode), кроме form_post. Form_post mode не позволяет прочитать code в клиентской части приложения, code отправляется в теле POST-запроса прямиком на callback со страницы Authorization Server.
Form_post response mode — это метод ответа в OAuth 2.0, когда на authorization code request authorization server отвечает не 302 с параметрами code/state и перенаправлением на redirect_url, а 200 со скрытой формой в своем Origin, которая отправляет POST-запрос на бэкенд клиента с code в теле запроса. Такой подход сильно ограничивает кражу кода, но не исключает его.
Общий вектор атаки, если есть XSS
Если нет PKCE
- Найти возможность внедрить JS в клиентском приложении.
- Запустить OAuth/OIDC-флоу из JS (в фрейме или новом окне).
- Спровоцировать прерывание OAuth-флоу у RP (смотри раздел «SSO-гаджеты. Атака Dirty Dancing»).
- Получить code/
tokenиз окна или iframe с помощью JavaScript. ОдинаковыйOriginпозволяет это сделать. - Использовать полученный код для обмена на токен или сессию.
Если есть PKCE
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
