【问题标题】:Stealling access token via third-party app通过第三方应用窃取访问令牌
【发布时间】:2018-01-16 04:25:54
【问题描述】:

假设我们有一个网站 (example.com),在该网站上创建帐户后,您可以通过访问 your-domain.example.com 登录到您的帐户。现在,在我登录到 my-domain.example.com 后,我要求连接到我的社交帐户。该网站创建的request_token链接如下所示:

https/://www.social-website.com/dialog/oauth?client_id=appid&redirect_uri=https/://mydomain.example.com

现在他们将redirect_uri 配置为接受anything.example.com 之类的任何内容。

因此,如果攻击者将redirect_uri 设置为attacker.example.com 并将链接发送给受害者。如果受害者已经获得了应用程序的授权,他将被自动重定向到带有访问令牌的attacker.example.com。如果不是,将首先要求他授权该应用程序。

之后,攻击者将能够管理受害者的社交帐户。这是社交网站的安全问题吗?

【问题讨论】:

    标签: security oauth url-redirection


    【解决方案1】:

    如果这是使用 JWT 的真正 OAuth,则有一种称为 client_secret 的东西可以加密/解密令牌。对于攻击者来说,除非加密密钥也被盗,否则 jwt 是无用的,攻击者无法对客户端 ID 做太多事情。

    【讨论】:

    • 这是我在第三方网站上搜索时发现的真正的 OAuth
      我不太了解“JWT”,但我认为这并不重要。我已经测试了这种攻击,一旦受害者授权了应用程序。我可以在他的帐户上发布并查看消息。
    • 您真的成功窃取了他们的客户机密吗? JWT 是一种用于通过网络传输凭据(通过秘密加密)的标准。
    • 不,我不认为我在窃取 JWT。但是为什么我需要窃取它,因为我可以访问受害者帐户?!
    • 该 url 不会让您真正访问您需要将客户端 url 参数与客户端密码结合起来的帐户。
    • 这是原始 request_token 链接:https/://www.socail-website.com/dialog/oauth?client_id=app-id&redirect_uri=https/://my-domain.example.com ?S={my-sessionid-in-example.com]&state=0ece190d8fc2f42ecba16d24bc90773694a6138b&scope=manage_pages,publish_pages,read_page_mailboxes&display=popup 如果将此链接发送给任何用户,一旦他授权该应用程序,我将可以访问他的社交帐户
    【解决方案2】:

    这在 OAuth 2.0 中是可能的,但为了缓解这种情况,强烈建议尽可能注册/白名单重定向 URI 并使用机密客户端(即具有客户端密码的客户端)。见:https://www.rfc-editor.org/rfc/rfc6749#section-10.6

    使用授权码授权请求授权时
    类型,客户端可以通过“redirect_uri”指定一个重定向URI 范围。如果攻击者可以操纵
    重定向URI,它可以导致授权服务器重定向
    资源所有者用户代理到受

    控制的 URI 具有授权码的攻击者。

    ...

    为了防止这样的 攻击,授权服务器必须确保重定向 用于获取授权码的 URI 与 交换授权码时提供的重定向 URI 访问令牌。授权服务器必须要求公开 客户并且应该要求机密客户注册他们的 重定向 URI。如果请求中提供了重定向 URI, 授权服务器必须根据已注册的 价值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 2017-04-21
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多