SAML 内部揭秘:信件里的签名
SAML 让你登录几乎所有工作应用,其签名存在于它签名的 XML 内部。
SAML 让你登录几乎所有工作应用,其签名存在于它签名的 XML 内部。深入探讨:应用、浏览器和身份提供商之间的登录流程,断言的样子,为什么规范化必须在每个字节上达成一致,以及为什么相同的错误类别从 2012 年到 2025 年不断重现。受 Trail of Bits 的“SAML:糟糕设计的碎片” (在 Hacker News 上获得 312 分) 启发。
本视频涵盖的内容
- SAML:从内部签名自身的登录方式
- 2002 年:四种 XML 格式,一个委员会,一个完整行业
- 登录流程:应用 → 身份提供商 → 通过浏览器返回
- 断言:签名存在于它签名的内容内部
- 规范化:在每个字节上达成一致,否则无人能登录
翻译的文字记录
译自英文原版旁白。可用音频和字幕由 YouTube 控制。
SAML:从内部签名自身的登录方式
0:00 SAML 是让你登录几乎所有工作应用的 XML, 它的签名存在于它签名的文档内部, 就像公证员将印章钉在他正在密封的信封内部。 在一个委员会编写它十年后,研究人员测试了十四个 SAML 框架。十一个失败了。 而本周,Trail of Bits 发表了一篇文章,称其为糟糕设计的碎片,登上了 Hacker News 的首页。 三分钟内:登录流程如何工作,签名隐藏在哪里,
0:27 以及为什么大家一致同意的解决方案是不同的协议。 这是 The Daily Diff 的内部揭秘。
2002 年:四种 XML 格式,一个委员会,一个完整行业
0:34 2002 年。 Oasis 的一个安全委员会将四种供应商 XML 格式合并为一种。 大学首先采用它,然后 Okta 在此基础上建立了一家公司, 这是一个委员会文档转化为收入最快的一次。 你打开应用。
登录流程:应用 → 身份提供商 → 通过浏览器返回
0:46 它不知道你是谁,所以它将你的浏览器跳转到身份提供商, 例如你公司的 Okta。 你在那里登录。 Okta 将一个签名的 XML 文档交给你的浏览器,说明你是谁, 然后浏览器将其回传。
断言:签名存在于它签名的内容内部
0:59 该文档就是断言。 它命名了用户,签名位于其内部, 通过其 ID 指向断言本身。 整个过程通过你的浏览器进行,也就是说, 通过用户进行。 为了检查它,应用
规范化:在每个字节上达成一致,否则无人能登录
1:11 重建了被签名的精确字节。 它将签名剪切出来,标准化空白和属性 顺序,并对结果进行哈希。 这就是规范化,如果双方在单个字节上不一致, 就没有人能登录。 JSON Web Token 的做法不同。 头部、负载和签名并排排列,中间有圆点。 无需先剪切任何内容。
2012 年:检查者和读取者查看不同元素
1:32 这就是症结所在。 检查签名的代码和读取用户名的代码 通常是两个不同的部分。 在 2012 年,一篇名为《On Breaking SAML》的论文展示了你可以将 签名的断言移动到读取者忽略的位置,并在其 查看的位置放置第二个断言。Salesforce 和 Shibboleth 是失败的十一个之一。 在 2018 年,Duo 展示了用户名内部的注释可能导致某些
2018 年和 2025 年:两个解析器,两个不同的答案
1:55 库只读取一半的名称,而签名仍然通过检查。 在 2025 年,GitHub 发现 Ruby SAML 内部的两个 XML 解析器 在同一文档上存在分歧。 相同的 Bug,新的十年。 Trail of Bits 称其为碎片,因为你缩放的每个级别都存在
为何它持续出现问题:糟糕设计的碎片
2:12 相同的缺陷。它基于 XML,签名是封装的, 而实际的登录可能只使用了规范的十分之一。 Hacker News 上的最高回复来自购买者。 如果你没有 SAML 支持,我可以找到一个有支持的产品。 两者都正确,这就是问题所在。 所以,周一。首先 SHIP IT OpenID Connect,Fly 和 Tailscale 将产品销售给
周一:OIDC 优先,一个维护良好的库,严格的形状
2:31 完全没有 SAML 的企业。 如果客户强制要求,使用维护良好的库,保持打补丁, 并拒绝那些看起来不像 Okta 或 Google 发送的消息。 切勿编写自己的签名检查。
内部揭秘:REVERT
2:43 内部揭秘:NEEDS REVIEW。 REVERT。将近二十五年了,一个永不消亡的 Bug 类别, 而大家一致同意的解决方案是不同的协议。 上周六我拆解了通行密钥,所以请在评论中告诉我接下来要揭示什么。 这就是今天的 The Daily Diff。 我是 Axrisi 的 Niko。 负责任地合并。
来源
- Trail of Bits, "SAML: A fractal of bad design" (Matt Schwager, Sep 21, 2026)blog.trailofbits.com
- Hacker News threadnews.ycombinator.com
- Somorovsky et al., "On Breaking SAML: Be Whoever You Want to Be", USENIX Security 2012www.usenix.org
- Duo Labs, SAML vulnerabilities affecting multiple implementations (2018): https://duo.com/blog/duo-finds-saml-vulnerabilities-affecting-multiple-implementations · CERT VU#475445www.kb.cert.org
- GitHub Security Lab, "Sign in as anyone: Bypassing SAML SSO authentication with parser differentials" (Mar 12, 2025)github.blog



