Dav*_* R. 4 security oauth-2.0
4.4.1.13.威胁:代码替换(OAuth登录)
攻击者可能尝试使用受害者的身份登录应用程序或网站.依赖OAuth保护服务API为登录用户提供的身份数据的应用程序容易受到此威胁的攻击.这种模式可以在所谓的"社交登录"场景中找到.
作为先决条件,资源服务器提供API以获得关于用户的个人信息,该个人信息可被解释为已获得用户身份.从这个意义上讲,客户端将资源服务器API视为"身份"API.客户端使用OAuth获取身份API的访问令牌.然后,它会在身份API中查询标识符,并使用它来查找其内部用户帐户数据(登录).客户端解释因为它能够获得有关用户的信息,用户已经过身份验证.
如果客户端使用授权类型"代码",则攻击者需要从目标客户端应用程序使用的同一身份提供者收集相应受害者的有效授权代码.攻击者使用与目标应用程序相同的身份提供程序欺骗受害者登录恶意应用程序(对于身份提供程序可能看似合法).这导致身份提供者的授权服务器为相应的身份API发布授权代码.恶意应用程序然后将此代码发送给攻击者,攻击者又触发目标应用程序内的登录过程.攻击者现在操纵授权响应并将其代码(绑定到其身份)替换为受害者的代码.然后,客户端将此代码交换为访问令牌,而访问令牌又由身份API接受,因为相对于资源服务器的受众是正确的.但由于身份API返回的标识符由访问令牌中的标识(基于受害者的代码发出)确定,因此攻击者以受害者的身份登录到目标应用程序.
影响:攻击者可以访问应用程序中的应用程序和用户特定数据.
对策:
所有客户端必须在每次请求时指示其客户端ID以交换访问令牌的授权代码.授权服务器必须验证是否已向特定客户端发出特定授权代码.如果可能,客户应事先进行身份验证.
客户端应使用适当的协议,例如OpenID(参见[openid])或SAML(参见[OASIS.sstc-saml-bindings-1.1])来实现用户登录.两者都支持受众对客户的限制.
这对我来说相当混乱:"攻击者需要从目标客户端应用程序使用的同一身份提供者那里收集相应受害者的有效授权码".什么是"相应的受害者"以及"身份提供者"在此后续用途中的含义是什么?
整个攻击描述都很模糊.我开始理解为"不应该使用OAuth 2.0来实现用户登录",但这并不意味着像Facebook这样的主要平台容易受到攻击吗?而且很容易受到什么影响?
我可能只需要澄清本段中使用的一些术语.
我自己找到了答案.本节中的措辞有点令人困惑,但攻击非常简单."身份提供者"是用于验证用户身份的资源服务器的名称.
基本上,这是使用为客户端应用程序发出的身份验证代码来获取不同应用程序的访问令牌的情况.我试着以更清晰的方式概述步骤.
仅当authorization_codes未绑定到特定客户端时,才可以执行步骤4.发给客户端的身份验证代码只能由同一客户端用于获取访问令牌.
当然Facebook并不容易受到攻击,因为这只需要授权服务器进行基本检查即可.