有人可以解释 OAuth 和 OpenID 中的“隐蔽重定向”漏洞吗?

信息安全 oauth 打开ID
2021-08-28 16:34:00

CNet 报告说,所有 OpenID 和 OAuth 站点都容易受到称为“隐蔽重定向”的攻击。这种攻击是什么,它是如何工作的,作为最终用户,我该如何降低风险?

4个回答

这根本不是 OAuth 2.0 的漏洞。这个问题被 CNET 和最初的发现者过度夸大和错误陈述。

简而言之:如果您的网站 (example.com) 实现了一个开放的重定向端点——也就是说,实现了一个将浏览器重定向到URL 参数中给定的任何URL 的 URL——并且您的重定向从传入 URL 到传出重定向 URL,那么第三方就有可能以各种令人讨厌的方式利用您网站的这个工件

最坏的情况:evil.com 能够获取最初用于您的网站 (example.com) 的身份验证代码,并且可能能够使用该身份验证代码从身份验证提供商(谷歌、Facebook 等)或可能甚至可以控制您网站上的用户帐户。

evil.com 是否能够使用该访问代码控制用户的 Google 帐户?不,因为访问代码是为您的站点 example.com 生成的,并且只能在那里工作。

是谁的错?您的,用于在您的网站上实施开放重定向。不要责怪 Google、Facebook 或其他人因为您的执行不力。

在您的网站上进行重定向有一些合法的用例。最大的一个是在登录到用户最初请求的网页(在您的网站上)后重定向浏览器。这只需要从您的网站重定向到您网站中的页面,在您的域上。

如何解决?让您的重定向端点 (example.com/redirect?&destination=ht.tp://foo.com...) 验证目标 URL。只允许重定向到您网站上的页面,在您的域中。

我的博客上的更多信息:http: //dannythorpe.com/2014/05/02/tech-analysis-of-serious-security-flaw-in-oauth-openid-discovered/

更新:使用 Facebook 进行 OAuth 用户登录时存在开放重定向问题。当您在 Facebook 上配置您的应用程序定义时,请务必在提供的重定向字段中输入您的特定于域的重定向 URL。Facebook 允许将此字段留空。如果留空,Facebook 本身在处理您网站的用户登录时充当开放重定向。

Facebook 应该通过不允许将重定向 URL 字段留空来解决此问题。

正如其他人所说,这不是一个新想法。Eran Hammer(Oauth 1.0 规范的创建者之一,从 Oauth 2.0 委员会辞职)在大约 3 年前写了一篇很好的漏洞概要。他的描述没有得到花哨的标志或任何耸人听闻的媒体报道。

http://hueniverse.com/2011/06/21/oauth-2-0-redirection-uri-validation/

这是原始发现者整理的 Youtube 视频,引导您通过漏洞:https ://www.youtube.com/watch?v=HUE8VbbwUms 。

OpenId 和 OAuth 都提供了一个字段,允许第三方站点在身份验证完成并成功时指定重定向。例如,您访问 Good Reads,他们希望您使用您的 Facebook 帐户登录。Good Reads 会告诉 Facebook,“嘿,当用户认证成功时,将他们重定向回http://goodreads.com。” 漏洞是其中一些第三方网站允许在其 URL ( http://google.com/redirect?url=http://attacker.com ) 中指定重定向,并且在重定向用户之前可能无法验证它们. 因此,攻击者可以为 Good Reads 等有效网站创建“使用 Facebook 登录”链接,并可以将重定向 url 指定为http://goodreads.com/redirect?url=http://attacker.com(假设 Good Reads 进行了这种重定向),您的 Facebook 登录弹出窗口将显示 Good Reads(您要去的一个完全正常的网站)想要通过 Facebook 进行身份验证,但是当您进行身份验证并重定向回 Good Reads 时,如果Good Reads 不会验证重定向 URL,您将立即被重定向到http://attacker.com

解决方法是让第三方验证重定向,但这可能需要一段时间才能发生。另一件事是,CNet 报告说攻击者可能能够通过这个小交换窃取信息,但我不太确定这是否可能。其他人可以对此事发表评论。但是,让用户访问一个糟糕的网站可能对他们来说已经足够了。

这是一种中间人攻击形式,站点可以获取您的 OpenID 凭据。它之所以有效,是因为 openID 的来源(facebook、google 等)在发送 openID 查询时没有执行足够的检查。

作为用户,您对此无能为力,您所能做的就是对使用 Oath 和 openID 非常谨慎。如果您不希望使用 openID 的站点弹出一个 openID 窗口,则不要允许它。如果您怀疑您的 openID 凭据已被捕获,请转到身份验证源(facebook、google 等)并尽快在此处进行更改。