Azure AD B2C уязвима для открытого перенаправления?

Я использую OWIN и OpenId для аутентификации пользователей моего веб-приложения с помощью Azure AD B2C, Startup.Auth.cs имеет такой код:

app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                 MetadataAddress = string.Format(AadInstance, Tenant, policy),
                AuthenticationType = policy,
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,
                RedirectUri = postLogoutRedirectUri,
                Notifications = new OpenIdConnectAuthenticationNotifica....

При выходе он вызывает перенаправление на postLogoutRedirectUrl, например

https://login.microsoftonline.com/MY_TENANT/oauth2/logout?p=my_policy&post_logout_redirect_uri=https%3A%2F%2Fgoogle.com%2F

URI перенаправления после выхода из системы присутствует в URI перенаправления на портале.

Если я остановлю браузер и изменю URI выхода в адресной строке на https% 3A% 2F% 2Fevil.com% 2F, перенаправление произойдет правильно, даже если этот URL https://evil.com/ не входит в разрешенный uri перенаправления.

Почему AD B2C не останавливает перенаправление? разве это не уязвимо?


person Vicky    schedule 19.01.2018    source источник
comment
Я не вижу уязвимости. Весь сеанс выполняется по HTTPS. Если URL-адрес изменяется во время полета, то либо ваше приложение скомпрометировано, либо клиент пользователя скомпрометирован. В любом из этих случаев перенаправление после выхода из системы было бы наименьшей из моих проблем.   -  person Jamie    schedule 19.01.2018


Ответы (2)


Когда вы входите в систему с помощью Azure AD B2C, служба B2C отправляет токен в «redirect_uri» (приложение). Поскольку токен должен оставаться безопасным, служба B2C просит вас внести в белый список URL-адреса, на которые он должен отправить токен.

Когда вы выходите из системы, ничего безопасного не передается из службы B2C обратно в приложение. Таким образом, даже если пользователь перенаправляется на вредоносный сайт, ничего безопасного не теряется.

person Parakh    schedule 19.01.2018
comment
Ничего хорошего, если кто-то перехватит этот запрос и перенаправит на вредоносный веб-сайт. Для пользователя, не имеющего ни малейшего понятия, это выглядит так, как если бы наш веб-сайт был перенаправлен. Это вполне может быть фишинговый сайт, похожий на мое веб-приложение. - person Vicky; 19.01.2018
comment
Перехват означал бы обход HTTPS. - person juunas; 20.01.2018
comment
@Vicky Как заявляли другие, для этого должен быть человек в середине TLS-атаки. Даже такие, как заявил парах, не потеряют ничего безопасного. - person Montel Edwards; 22.01.2018
comment
Это не считается уязвимостью? Я имею в виду, что если злоумышленник успешно перенаправляет пользователя (например, через электронную почту) на свои веб-сайты, он может с помощью социальной инженерии получить учетные данные пользователя (например, злоумышленник создает форму входа, идентичную веб-сайту, с URL-адресом, похожим на на уязвимый сайт). - person salt; 12.07.2019

Вы можете изменить это поведение, чтобы заставить Azure AD B2C обрабатывать перенаправление выхода только в том случае, если действительный токен идентификатора передается в качестве параметра в запросе выхода. Чтобы B2C автоматически включил токен идентификатора и проверил его наличие, просто отредактируйте свою политику входа / регистрации на портале Azure, т. Е.

введите здесь описание изображения

В качестве альтернативы, если вы используете настраиваемые политики, вы можете добавить элемент SingleSignOn в раздел UserJourneyBehaviors и установить для EnforceIdTokenHintOnLogout значение true, то есть:

<UserJourneyBehaviors>
     <SingleSignOn Scope="Tenant" EnforceIdTokenHintOnLogout="true" />

</UserJourneyBehaviors>
person RMD    schedule 21.02.2020