KeyFrame內部研究專用

Black Hat Europe 2025 | The Fragile Lock: Novel Bypasses For SAML Authentication

Black Hat·6月19日週五·30 min英文

三句話摘要

研究人員揭示利用 XML 解析器差異與「虛空規範化」技術,實現對 SAML 身份驗證的完全繞過攻擊。 SAML 的安全性長期建立在解析器行為差異與單人維護的 libxml2 之上,任何使用 Ruby SAML(< 1.18.0)或未經審查的 PHP XML 簽名庫的系統都應立即升級,否則攻擊者僅需一個電子郵件地址即可完全繞過身份驗證。 簽名包裝攻擊的歷史盲點:過去 20 年的簽名包裝(Signature Wrapping)攻擊研究僅聚焦於「權限提升」,從未實現完整的身份驗證繞過鏈;本研究首次將其升級為徹底入侵目標系統。

重點整理

重點
  • 1

    簽名包裝攻擊的歷史盲點:過去 20 年的簽名包裝(Signature Wrapping)攻擊研究僅聚焦於「權限提升」,從未實現完整的身份驗證繞過鏈;本研究首次將其升級為徹底入侵目標系統。

  • 2

    XML 解析器不一致是根本弱點:GitLab Enterprise 使用的 Ruby SAML 同時依賴 rexml(用正規表示式解析 XML)與 Nokogiri(libxml2 的封裝),兩者對命名空間前綴、重複屬性、文件類型宣告的處理行為不同,攻擊者可在驗證層「隱藏」惡意節點,在業務邏輯層「顯示」偽造斷言。

  • 3

    虛空規範化(Void Canonicalization)創造黃金 XML:透過插入精心設計的相對 URI 宣告,讓 libxml2 的規範化函式返回空字串但 Nokogiri 忽略該返回值,最終對空字串計算雜湊值並塞入簽名,製造出「始終通過驗證」的 XML,無需任何有效私鑰。

  • 4

    整個 SAML 生態系建立在脆弱地基上:libxml2 的 README 明確說明整個專案僅由一人維護且存在大量安全漏洞;SAML 的複雜性(XPath、XSLT、規範化)製造了龐大攻擊面,或許是時候淘汰 SAML。

實用技巧與重點

乾貨
  • 漏洞與 CVE:
  • GitLab Enterprise 版本:17.8.4(完全身份驗證繞過)
  • Ruby SAML 修復版本:1.18.0(完整重寫兩庫協作邏輯);1.12.4 僅熱修復、仍有殘留漏洞
  • 相關 CVE 已於研究公開前(2025 年 3 月)由維護者發布
  • 工具與函式庫:
  • Ruby SAML 庫(業務邏輯:rexml;簽名驗證:rexml + Nokogiri)
  • Nokogiri(libxml2 的 Ruby 封裝)
  • libxml2(C 語言,底層 XML 處理核心)
  • Rob Richardson XML Signature Library(PHP,GitHub 上廣泛複製貼上使用,直接忽略 libxml2 的 false 返回值)
  • Okta(身份提供商,預設對外暴露已簽名的聯合元數據)
  • Microsoft Entra(可用於查詢聯合元數據信封簽名)
  • 攻擊四步驟流程:
  • 在頂層插入相對 URI 宣告,破壞規範化邏輯,使簽名值計算為空字串
  • 對空字串計算雜湊值,得到「黃金摘要值」,永遠通過驗證
  • 取得有效信封簽名(來源:Okta 聯合元數據、Microsoft Entra 元數據,或在 SAML 請求中放置高位 ASCII 字元的 ID 觸發無效規範化)
  • 將惡意斷言放入 XML Schema 允許的擴展節點(如 AccessExtension 或 SubStatusDetail)
  • 攻擊效果與條件:
  • 只需知道受害者電子郵件地址(可從 LinkedIn 取得)
  • 若目標啟用 2FA,可利用「帶引號的郵件地址」在服務提供商側創建新使用者帳號
  • Okta 即使刪除開發者帳號後,聯合元數據 URL 仍持續有效
  • 受影響範圍:
  • 所有 Ruby SAML 實作(< 1.18.0)
  • PHP XML 簽名函式庫(Rob Richards 版本,廣泛複製於 GitHub 各 SAML 提供商)
  • 不受影響:C 語言實作(正確檢查返回值)、Java(不使用 libxml2)

結論

結論

SAML 的安全性長期建立在解析器行為差異與單人維護的 libxml2 之上,任何使用 Ruby SAML(< 1.18.0)或未經審查的 PHP XML 簽名庫的系統都應立即升級,否則攻擊者僅需一個電子郵件地址即可完全繞過身份驗證。

完整解析

詳細

SAML 作為企業單點登入的核心標準已有 20 年歷史,其安全性完全建立在身份提供商(如 Okta)以私鑰對 XML 斷言簽名這一機制之上。研究者從 Juho Forsman 關於 XML 序列化與反序列化不一致性的研究出發,於 2024 年 9 月開始深入挖掘,並迅速發現當時最新版 GitLab Enterprise 存在完整身份驗證繞過漏洞。此前針對 SAML 的簽名包裝攻擊僅被用於權限提升,從未出現過完整利用鏈——這正是本研究的突破點。

GitLab Enterprise 使用的 Ruby SAML 庫在業務邏輯層使用 rexml(一個以正規表示式解析 XML 的解析器),在簽名驗證層則同時使用 rexml 和 Nokogiri(libxml2 的 Ruby 封裝)。研究者發現,當 XML 元素存在兩個相同屬性時,rexml 不遵循 XML 標準的限制(通常應拋出錯誤),這使得攻擊者可以向 rexml 隱藏真正的簽名,同時讓 Nokogiri 看到另一個偽造版本。兩個解析器針對 XML 命名空間前綴的不同處理方式,進一步放大了這種差異:透過在 XML 前綴下重新聲明命名空間,可讓 Nokogiri 認為某個簽名節點根本不是數位簽章,從而在驗證層將其忽略。

關鍵突破來自「虛空規範化(Void Canonicalization)」技術。XML 規範化標準明確禁止使用相對 URI 作為引用元素的 URI,libxml2 的對應函式遇到相對 URI 會返回 false 並中止。然而,Nokogiri 作為封裝層直接忽略這個返回值,將緩衝區輸出當作有效結果使用。攻擊者因此可在頂層插入精心設計的相對 URI 宣告,完全控制規範化的輸出——使其成為空字串,再對空字串計算 SHA-256 雜湊值塞入摘要欄位,製造出「黃金 XML」:無論斷言內容為何,此 XML 永遠能通過簽名驗證。PHP 的 Rob Richardson XML 簽名庫因相同原因——忽略 libxml2 的 false 返回值——也受到相同影響,且在 GitHub 上被廣泛複製貼上至各類 SAML 實作中。

在現場演示中,研究者針對 GitLab Enterprise 17.8.4 搭配 Okta 的環境,僅憑目標使用者的電子郵件地址,透過自製的瀏覽器擴充套件在幾秒內完成身份驗證繞過並以任意使用者身份登入。Okta 預設對外公開已簽名的聯合元數據,使攻擊者無需任何特殊條件即可取得有效信封簽名。真實目標的案例研究顯示,即便服務商自訂了快取保護機制,也可轉而利用 Microsoft Entra 的聯合元數據繞過;若目標帳號啟用了雙重驗證,可利用帶引號的郵件地址格式在服務提供商側創建新帳號。目前 Ruby SAML 1.18.0 已完整修復,但 1.12.4 分支僅有熱修復且官方已宣布停止支援;整個 SAML 生態系的根本隱患——單人維護的 libxml2 及其複雜的攻擊面——在可預見的未來仍將持續存在。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「Web2 安全」的內容

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car
7 min
Web2 安全英文PODCAST8月25日

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car

SANS Stormcast

  • PNG 容器攻擊的簡易性設計:Double Cup 不依賴複雜的 Exif 或隱寫技術,只用 PNG 副檔名和檔頭來偽裝,核心是利用 findstr 指令的常見可用性讓執行變得無需額外工具。
  • Web Audio API 的隱密指紋識別:音訊於增益零的無聲狀態下播放,使用者完全無感,但錄製波形足以建立裝置特徵,在瀏覽器原生功能層面難以區分是反詐欺還是過度追蹤。
  • 域名過期引發的串聯漏洞:DMARC 報告端點使用過期域名是常見疏漏,允許攻擊者透過簡單的域名註冊取得他人的 SPF/DKIM 錯誤報告,進而收集目標系統配置情報。
Risky Bulletin: Expired credit cards can be used for malicious transactions
5 min
Web2 安全英文PODCAST8月24日

Risky Bulletin: Expired credit cards can be used for malicious transactions

Risky Business

  • 支付安全的非對稱風險:Visa卡利用未加密的卡片資料與NFC通訊,攻擊者可藉由中間人技術竄改過期日期進行交易,但MasterCard、美運卡與Discover的防護更完善,顯示不同發卡機構的安全架構存在明顯差異。
  • 國家級駭客活動的連鎖延伸:北韓Lazarus集團在2月單一事件已累積100名受害者,涵蓋大學、警察部門、媒體與醫療機構,伊朗駭客則針對基礎建設如電力系統發動破壞性攻擊,反映地緣政治在網路戰爭中的升溫。
  • AI加速漏洞生態的雙面刃:AI工具催生近2萬份漏洞概念驗證代碼發布,但同時也導致大量失效漏洞代碼氾濫,增加資安團隊甄別真實威脅的難度;Mayer Protocol遭攻擊事件中,駭客用AI鏈接六個無關的小漏洞完成盜竊170萬美元的攻擊。
SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware
5 min
Web2 安全英文PODCAST8月24日

SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware

SANS Stormcast

  • Microsoft EntraID 的遠端代碼執行漏洞已由微軟修補,初期報告顯示已遭利用但後來更正為未遭利用。這反映 Microsoft 在雲端軟體安全上的透明度提升,對漏洞採用與內部軟體相同的 CVE 編號和公告流程。
  • PowerShell 指令碼可用於驗證 MFA 部署完整性,特別是找出未啟用 MFA 的遺漏帳號。同時可以分析 EntraID 登入日誌中的異常行為,如風險係數評估和地理位置檢測,幫助組織快速識別可疑登入。
  • GitLab 的 GraphQL 代碼注入漏洞允許未認證攻擊者刪除或修改儲存庫,潛在導致供應鏈攻擊。已有公開概念驗證 (PoC) 存在,使用內部部署 GitLab 的組織必須立即修補。