Azure AD B2C 容易受到开放重定向的影响?
Posted
技术标签:
【中文标题】Azure AD B2C 容易受到开放重定向的影响?【英文标题】:Azure AD B2C vulnerable to Open Redirect? 【发布时间】:2018-06-28 16:07:29 【问题描述】:我正在使用 OWIN 和 OpenId 使用 Azure AD B2C 对我的 Web 应用程序的用户进行身份验证,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 不停止重定向?这不是易受攻击的吗?
【问题讨论】:
我看不到漏洞。整个会话通过 HTTPS 运行。如果 URL 在运行过程中被修改,则要么您的应用程序受到威胁,要么用户客户端受到威胁。在这两种情况下,注销后重定向将是我最不关心的问题。 【参考方案1】:您可以更改此行为以强制 Azure AD B2C 仅在将有效 ID 令牌作为参数传入注销请求时才处理注销重定向。要让 B2C 自动包含 ID 令牌并检查其是否存在,只需在 Azure 门户中编辑您的登录/注册策略,即:
或者,如果您使用自定义策略,您可以将SingleSignOn
元素添加到UserJourneyBehaviors
部分,并将@987654325@ 设置为true,即:
<UserJourneyBehaviors>
<SingleSignOn Scope="Tenant" EnforceIdTokenHintOnLogout="true" />
</UserJourneyBehaviors>
【讨论】:
【参考方案2】:当您使用 Azure AD B2C 登录时,B2C 服务会向“redirect_uri”(应用程序)发送一个令牌。由于令牌需要保持安全,因此 B2C 服务会要求您将应该将令牌发送到的 URL 列入白名单。
当您退出时,没有任何安全信息从 B2C 服务传输回应用程序。因此,即使用户被重定向到恶意站点,也不会丢失任何安全信息。
【讨论】:
如果有人拦截了这个请求并重定向到恶意网站,那就不好看了。对于毫无头绪的用户,它看起来好像我们的网站重定向了。这很可能是一个旨在看起来像我的网络应用程序的网络钓鱼网站 拦截意味着通过 HTTPS。 @Vicky 正如其他人所说,必须有一个人参与 TLS 攻击才能发生这种情况。即便如此,正如 parakh 所说,也不会丢失任何安全的东西。 这算不算漏洞?我的意思是,如果攻击者成功在他的网站上重定向用户(例如通过电子邮件),他可以通过社会工程获取用户的凭据(例如,攻击者构建与网站相同的登录表单,其 URL 类似于到易受攻击的网站)。以上是关于Azure AD B2C 容易受到开放重定向的影响?的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure AD B2C 中用作 OpenID IDP 提供程序时的 Okta 重定向 URI
Azure AD B2C:请求中的重定向 URI 与授权给 OAuth 客户端的不匹配