菜单

OAuth 和 SAML 漏洞

相关源文件

目的

本文档全面概述了 OAuth 2.0 和 SAML 2.0 身份验证协议中的安全漏洞。它涵盖了两种协议的利用技术、示例和缓解策略,以及与 JWT 相关的漏洞,因为 JWT 通常与 OAuth 2.0 实现一起使用。有关通用基于令牌的身份验证漏洞的信息,请参阅 JSON Web Token 攻击

身份验证协议概述

来源:SAML Injection/README.md, JSON Web Token/README.md

OAuth 2.0 漏洞

OAuth 2.0 是一个授权框架,它允许第三方应用程序获得对服务器上用户帐户的有限访问权限。该协议依赖于令牌交换,而不是直接共享凭据。

OAuth 流程和漏洞

来源:Server Side Request Forgery/README.md:174-183

常见的 OAuth 漏洞

漏洞描述影响
重定向 URI 验证重定向 URI 参数验证不当通过代码拦截进行帐户接管
缺少状态参数无防 CSRF 状态参数跨站请求伪造
客户端密钥泄露公共客户端中的客户端密钥冒充合法客户端
授权码拦截重定向期间捕获代码会话劫持
缺少 PKCE没有代码交换证明密钥的公共客户端代码拦截攻击

来源:Server Side Request Forgery/README.md, JSON Web Token/README.md

OAuth 中的 JWT 漏洞

JWT(JSON Web Token)通常用作 OAuth 2.0 实现中的令牌格式。

JWT 结构和漏洞

来源:JSON Web Token/README.md:13-94, JSON Web Token/README.md:121-187

JWT 攻击技术

None 算法 (CVE-2015-9235)

此漏洞利用允许将 alg 值设置为 none 的 JWT 库,从而完全绕过签名验证。

# Original JWT
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXUyJ9.eyJsb2dpbiI6InRlc3QiLCJpYXQiOiIxNTA3NzU1NTcwIn0.Sig

# Modified JWT with none algorithm
eyJhbGciOiJub25lIiwidHlwIjoiSldTIn0.eyJsb2dpbiI6InRlc3QiLCJpYXQiOiIxNTA3NzU1NTcwIn0.

来源:JSON Web Token/README.md:152-186

密钥混淆攻击 - RS256 到 HS256 (CVE-2016-5431)

此攻击会欺骗服务器将公钥用作 HMAC 密钥,从而允许攻击者伪造有效令牌。

# Original JWT with RS256 algorithm
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.Sig

# Modified JWT with HS256 algorithm, signed with the public key
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.Sig

来源:JSON Web Token/README.md:187-210

JWT kid 声明滥用

kid(密钥 ID)参数可用于路径遍历或强制使用可预测的文件。

来源:JSON Web Token/README.md:397-452

JWKS 注入 (jku Header)

jku 头值指向包含公钥的 URL。攻击者可以将此 URL 替换为他们控制的 URL。

来源:JSON Web Token/README.md:457-506

SAML 漏洞

SAML(Security Assertion Markup Language)是一个基于 XML 的身份验证和授权数据交换框架。

SAML 结构和攻击向量

来源:SAML Injection/README.md:2-17, SAML Injection/README.md:25-103

SAML 漏洞示例

签名剥离

从 SAML 响应中省略签名部分,如果服务提供商没有正确验证签名,则可以绕过身份验证。

来源:SAML Injection/README.md:32-64

XML 签名包装 (XSW) 攻击

XSW 攻击利用某些实现验证签名的方式,通过创建包含合法断言和伪造断言的结构。

来源:SAML Injection/README.md:69-102

XML 注释处理漏洞

此攻击通过在属性值中插入注释来绕过验证。

来源:SAML Injection/README.md:105-122

缓解策略

OAuth 2.0 缓解措施

漏洞缓解
重定向 URI 验证对重定向 URI 使用精确匹配
CSRF 攻击始终实现并验证状态参数
授权码拦截实现 PKCE (RFC 7636)
客户端密钥泄露为公共客户端使用机密客户端或 PKCE
令牌范围问题验证和限制令牌范围

JWT 缓解措施

漏洞缓解
None 算法攻击明确检查 alg 参数并拒绝 "none"
密钥混淆攻击为不同算法使用不同的密钥
kid 参数滥用使用白名单验证 kid 值
jku 头注入白名单允许的 JWKS URL
弱密钥使用强大、随机生成的密钥

SAML 缓解措施

漏洞缓解
签名验证问题始终要求并验证签名
XML 签名包装实现正确的引用验证
XML 注释注入正确的 XML 解析和验证
XML 外部实体在 XML 解析器中禁用外部实体
XSLT 注入限制或禁用 XSLT 转换

来源:SAML Injection/README.md:187-199, JSON Web Token/README.md:523-543

测试工具和资源

来源:JSON Web Token/README.md:28-32, SAML Injection/README.md:19-21