OAuth攻防实战:现实世界中的漏洞利用与滥用
OAuth并非设计上存在缺陷,但在实际应用中,错误配置和巧妙滥用使其成为黑客绕过多因素认证(MFA)的捷径。
概述
OAuth 2.0是现代数字生活的隐形支柱。从电商平台的"使用Google登录"按钮到企业级的Microsoft Entra ID集成,OAuth已成为委托认证和授权的实际标准。尽管OAuth旨在简化身份和访问管理,但其广泛采用也使其成为攻击者的主要目标。
标准化十多年来,OAuth漏洞和错误配置仍然普遍存在。在现实环境中,攻击者经常利用OAuth流程中的细微缺陷——有时是为了绕过多因素认证(MFA),有时是为了窃取刷新令牌以获得持久访问权限,有时则是诱骗用户直接授予他们访问权限。
重定向URI操纵与开放重定向
方法: OAuth的核心是将用户从身份提供商重定向回应用程序,同时携带授权码或令牌。如果redirect_uri未经过严格验证,攻击者可以劫持此流程。
真实案例:
- CVE-2020-26878(Azure Active Directory OAuth重定向URI漏洞)——允许攻击者操纵重定向URI以窃取令牌
- 多个金融平台被发现存在开放重定向的OAuth链漏洞,导致账户被接管
影响:
- 完全账户接管
- 在某些配置中可绕过双因素认证
恶意应用与同意钓鱼
方法: 攻击者不再窃取凭据,而是创建看似合法的恶意OAuth应用——通常模仿Teams、Outlook或内部IT工具。
真实入侵事件:
- 2020年,微软披露国家支持的行为者滥用恶意OAuth应用在企业租户中维持持久性
- 2022年,Storm-0558攻击利用OAuth令牌窃取访问Microsoft Exchange Online邮箱
影响:
- 无需密码即可访问敏感资源
- 长期持久性且不会触发警报
授权码泄露
方法: OAuth的授权码设计为短期中间体。但如果它们通过恶意重定向URI、受损日志或开放重定向漏洞泄露,攻击者可以将它们交换为有效的访问令牌。
重要CVE:
- CVE-2021-26708(社交登录平台中的OAuth实现缺陷)允许代码泄露到日志中
- CVE-2019-3778(Cloud Foundry UAA)通过不当验证向攻击者暴露OAuth授权码
影响:
- 账户接管
- 即使有state或nonce保护也能保持持久性
会话固定与令牌滥用
方法: 即使OAuth流程正确,会话处理也可能破坏安全保证。如果应用程序盲目信任令牌或未能正确验证会话,攻击者可以劫持有效会话或重用代码。
案例研究:
- CVE-2022-23521(GitHub OAuth应用问题)——攻击者可在不正确的会话处理场景中重用令牌
- 发现具有弱SSO集成的金融科技应用即使在使用MFA后仍为攻击者提供持久访问
影响:
- MFA和SSO绕过
- 权限提升
新兴威胁:现代OAuth利用
攻击者的创新速度超过了防御者:
- 中间人(AiTM)OAuth钓鱼工具包:代理登录页面,拦截令牌并重放它们
- 设备代码流滥用:钓鱼攻击诱使用户输入授权攻击者控制应用的设备代码
- 多租户利用:一个恶意应用可以在多个组织中扩展
防御策略与缓解措施
严格的重定向URI验证
- 不使用通配符
- 要求字节对字节匹配
OAuth应用治理
- 审计并撤销未使用的应用
- 要求清晰的同意提示
会话和令牌卫生
- 单次使用代码
- 轮换刷新令牌
- 对敏感操作重新认证
用户和管理员意识
- 包含恶意同意流程的钓鱼演练
- 教育用户了解第三方应用风险
API和令牌监控
- 检测异常范围或异常的API调用
- 对长期存在的刷新令牌持久性发出警报
真实世界的CVE、零日漏洞和OAuth相关入侵
尽管OAuth是一个有详细文档记录的标准,但历史显示了一个反复出现的主题:细微的错误配置、弱验证和攻击者的创造性滥用。以下是与OAuth相关的头条事件的非详尽列表:
CVE和零日漏洞
- CVE-2019-3778 — Cloud Foundry UAA OAuth授权码可能被不当验证,向攻击者暴露令牌
- CVE-2020-26878 — Microsoft Azure Active Directory重定向URI处理中的缺陷允许攻击者操纵OAuth流程并窃取令牌
- CVE-2021-26708 — 社交登录中错误配置的OAuth允许代码通过客户端日志泄露,使攻击者能够兑换被盗代码
- CVE-2022-23521 — GitHub OAuth令牌重用GitHub OAuth应用程序中的弱会话处理启用令牌重放和持久未经授权的访问
- CVE-2023-36049 — Microsoft Entra ID OAuth滥用令牌验证弱点使攻击者能够绕过某些授权检查
重大入侵和利用
- Storm-0558(2022-2023)与中国有关的组织使用被盗签名密钥伪造OAuth令牌,入侵Microsoft Exchange Online邮箱
- Evilginx AiTM活动(2022+)使用中间人钓鱼代理在野外窃取OAuth令牌,大规模绕过MFA保护
- Office 365租户中的同意钓鱼(2020)攻击者注册模仿Microsoft Teams和Outlook的恶意Azure AD应用,诱骗用户授予OAuth同意并外泄数据
- Facebook OAuth滥用(2018)攻击者将重定向URI错误配置与"使用Facebook登录"集成链接起来,接管第三方网站上的账户
- Google OAuth零日利用(2017)臭名昭著的"Google Docs蠕虫"通过伪装成文档共享链接的恶意OAuth同意请求传播
实验:动手实践OAuth利用
学习OAuth安全意味着安全地破坏OAuth。以下是实践路径:
手动设置
- 构建具有不当redirect_uri验证的演示应用
- 配置攻击者控制的重定向端点以捕获令牌
- 通过模拟虚假OAuth同意屏幕扩展它以练习同意钓鱼
Hack The Box(HTB)
- 寻找像"Schooled"或"Academy"这样的盒子,其中类似OAuth的流程是利用路径的一部分
- Pro Lab环境通常在企业级设置中复制OAuth/OpenID错误配置
TryHackMe(THM)
- 如"OAuth Playground"、“SSO Attack"和"Advent of Cyber(OAuth挑战)“等房间提供指导练习
- 围绕令牌泄露、会话滥用和通过OAuth流程绕过MFA的实践场景
PortSwigger Web Security Academy
- 免费OAuth实验室包括:
- “OAuth认证漏洞”
- “通过开放重定向窃取OAuth访问令牌”
- “利用OAuth隐式流”
- “滥用OAuth进行账户接管”
结束语
OAuth无处不在——但仍然脆弱。历史显示了相同的主题:弱验证、错误配置的重定向、恶意应用以及愿意以意外方式扭曲流程的攻击者。
OAuth安全与其说是关于规范,不如说是关于实现——而在这个差距中,攻击者得以蓬勃发展。