【问题标题】:Does OAuth "state" mitigate any genuinely dangerous attacks?OAuth“状态”是否减轻了任何真正危险的攻击?
【发布时间】:2019-02-26 19:02:15
【问题描述】:

我使用OAuth Playground 来更好地理解OpenID Connect 流程,它对验证state 参数有这样的说法:

用户被重定向回客户端,您会在 URL 中注意到一些额外的查询参数:

?state=7ymOWcwttpCfDNcs&code=Tav2TPBjSNvR8aowA3oe

由于攻击者有可能制作与此类似的 GET 请求,因此攻击者可能会向您的应用程序提供垃圾授权代码。您需要首先验证 state 参数是否与此用户的会话匹配,以便您可以确定您发起了请求,并且只发送了一个用于您的客户端的授权代码。

根据这种解释,我们用 state 参数阻止的唯一“攻击”似乎是攻击者向我们的应用程序发送错误代码,我们针对授权服务器检查错误代码,然后我们被拒绝。

但是这实际上并没有给攻击者带来太多或伤害我们:我们只是向身份验证服务器发出一些额外的 http 请求,如果我们立即拒绝请求,我们就不需要发出这些请求当状态不匹配时我们的服务器。

我的问题是:我的理解是否正确,还是我错过了 state 正在阻止的更严重的攻击向量?

【问题讨论】:

    标签: oauth-2.0 openid openid-connect


    【解决方案1】:

    我的问题是:我的理解正确吗

    没有

    为什么?

    OAuth 2.0 规范提供了一个可靠的示例,说明可以使用伪造的重定向做什么。一、来自definition

    状态:推荐。客户端用来维护的不透明值 请求和回调之间的状态。

    State 有助于将授权请求与授权响应关联起来,防止跨站请求伪造。认为您的客户有一个接收响应的重定向 URL。如果恶意方使用有效的访问令牌(使用隐式流时)重定向到您的客户端怎么办。如果此访问令牌允许访问属于您使用的同一资源服务器中的恶意方的有效资源怎么办。 OAuth 2.0 (RFC6749) give a solid example for this on bank account details.

    针对客户端重定向 URI 的 CSRF 攻击允许攻击者 注入自己的授权码或访问令牌,可以 导致客户端使用与 攻击者的受保护资源而不是受害者的(例如,保存 受害者的银行账户信息到受保护的资源 由攻击者控制)。

    State 参数可防止此类攻击。此外,欢迎您通过RFC6819 - Threat Model and Security Considerations。它包括在采用 OAuth 2.0 时可以采取的许多攻击向量和计数器测量。它还包括一个关于CSRF attack and usage of state 的部分。

    【讨论】:

    • 感谢您的链接。我注意到您说:“使用隐式流时。”我应该更清楚我在询问授权代码流程。但是,阅读您提供的链接,CSRF 似乎也是身份验证代码流中的一个问题——对吗?
    • @Jonah 是的。考虑授权代码流。一旦客户端收到授权码,它会将代码交换为令牌。假设恶意方以某种方式获得了原始请求的客户端 ID(注意 - 身份验证请求中需要客户端 ID,并且身份验证代码与客户端 ID 相关联),那么将发布具有允许访问恶意资源的范围的令牌。因此,客户端可能会暴露最终用户的详细信息。所以是的,CSRF 对需要重定向的授权类型是一种威胁
    • 还要注意,这里的恶意资源不一定是有害资源。根据提供的规范和链接,它们是资源服务器中存在的某个有效方拥有的资源。但这些资源并不是最终用户想要访问的必需资源。例如,最终用户可能会在不知不觉中与此非预期方共享敏感信息。
    猜你喜欢
    • 2011-04-30
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2012-02-13
    • 1970-01-01
    • 2021-09-14
    • 2011-04-09
    相关资源
    最近更新 更多