本文将介绍几个对于 OAuth 2.0 认证系统的攻击方法。
CSRF 攻击
CSRF 的大名叫 Cross-Site Request Forgery,中文叫做跨站请求伪造。
对于 OAuth 2.0 认证系统,一个可行的 CSRF 攻击可以是这样的:
假定小白和小黑是宿敌,小黑竭尽全力想要把小白的 US$ 5,670 给骗到手。
小黑知道:
- 小白在某某银行 (
some-bank.com) 有一个账户。 - 某某银行采用 OAuth 2.0 进行认证。
那么,小黑就有可能通过以下方式给小白下套:
- 小黑假扮银行官方,给小白发送一封钓鱼邮件 (例如嵌入一个透明的
<img>元素)。 - 小白在打开邮件时,自动加载了一段小黑精心制作的攻击性 URI,例如
https://webportal.some-bank.com/action/smallValueTransaction?to=xiaohei@some-bank&value=5670¤cy=USD。 - 小白被带到某某银行的 OAuth 认证界面。
- 如果小白已经登录了某某银行的系统,那么认证系统很可能直接代小白完成了认证和授权任务,小白在一阵等待以后回到了网上银行的首页。跳到第 6 步。
- 如果小白暂未登录,她会看到银行的 OAuth 界面向其请求授权,询问其是否同意完成转账任务。如果小白直接点击了「确定」,那么也会跳到第 6 步。
- 攻击成功!小黑拿到了小白的 USD$ 5,670!
又或者,小黑可以玩得再花一点。
假设某某银行危险地将小白的银行卡号、安全码和过期日都存储在 OpenID Connect 里的 profile 内容中,并且对 redirect_uri 并没有限制,那么小黑可以将 redirect_uri 重定向到她自己的攻击网站中,比如:
|
|
拿到 profile 以后,小黑能动用的小白的资金可能就不止 US$ 5,670 了。