Содержание статьи
- 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
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
