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 二○○二年。 Oasis 的一個安全委員會將四種廠商 XML 格式合併為一種。 大學首先採用它,然後 Okta 憑藉它建立了一家公司, 這是委員會文件轉化為收入最快的一次。 您打開應用程式。
登入過程:應用程式 → 身分提供者 → 透過您的瀏覽器返回
0:46 它不知道您是誰,所以它會將您的瀏覽器彈回身分提供者, 例如您公司的 Okta。 您在那裡登入。 Okta 會向您的瀏覽器傳遞一份已簽署的 XML 文件,說明您是誰, 然後瀏覽器會將其發回。
斷言:簽章存在於它簽署的內容內部
0:59 該文件就是斷言。 它命名了使用者,簽章位於其中, 透過其 ID 指回斷言。 而整個過程都透過您的瀏覽器進行,也就是說, 透過使用者。 為了檢查它,應用程式
規範化:在每個位元組上達成一致,否則無人能登入
1:11 重建了被簽署的確切位元組。 它將簽章剪掉,規範化空白和屬性 順序,並雜湊結果。 這就是規範化,如果兩邊相差一個位元組, 沒有人能登入。 JSON Web Token 的做法不同。 標頭、酬載和簽章並排放置,中間用點分隔。 無需先剪掉任何東西。
2012 年:檢查器和讀取器查看不同的元素
1:32 這是漏洞。 檢查簽章的程式碼和讀取使用者名稱的程式碼通常是 兩個不同的部分。 在 2012 年,一篇名為《論破壞 SAML》的論文顯示,您可以將已簽署的斷言移到 讀取器忽略它的地方,然後在它查找的地方放置第二個斷言。 Salesforce 和 Shibboleth 是其中十一個受害者。 在 2018 年,Duo 證明使用者名稱中的註解會讓某些
2018 年和 2025 年:兩個解析器,兩個不同的答案
1:55 程式庫只讀取一半的名稱,而簽章仍然通過檢查。 在 2025 年,GitHub 發現在 Ruby SAML 內部,兩個 XML 解析器 對同一份文件存在分歧。 相同的錯誤,新的十年。 Trail of Bits 將其稱為碎形,因為您縮放到的每個層級都有
為什麼它不斷崩潰:糟糕設計的碎形
2:12 相同的缺陷。它基於 XML,簽章被包裝在其中, 而實際登入可能只使用了規範的十分之一。 Hacker News 上最熱門的回复來自買家。 如果您沒有 SAML 支援,我可以找到有支援的產品。 兩者都屬實,這就是問題所在。 所以,星期一。首先發布 OpenID Connect,Fly 和 Tailscale 將產品銷售給
星期一:首先是 OIDC,一個維護良好的程式庫,嚴格的形狀
2:31 完全沒有 SAML 的企業。 如果客戶強制要求,請使用維護良好的程式庫,保持其修補, 並拒絕看起來不像 Okta 或 Google 發送的訊息。 切勿自行編寫簽章檢查。
內部構造的判決:REVERT
2:43 內部構造的判決。 REVERT。將近二十五年,一種永遠不死的錯誤類別, 而大家一致同意的解決方案是不同的協定。 上週六我拆解了通行密鑰,所以在評論中告訴我接下來要拆解什麼。 這就是今天的 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



