Golang XML解析器漏洞可引發SAML認證繞過
12月14日,Mattermost與Golang團隊發布了3個Go 語言XML 解析器安全漏洞。漏洞影響多個基于Go 的SAML 實現,可能引發完整的SAML 認證繞過。
XML 解析器不能保證完整性
下面列出的Golang XML 語言解析器漏洞導致在編碼和解碼XML 輸入時并不會返回可靠的結果,也就是說XML markup(標記)在使用解析器進行編碼器時會返回不連續的、意外的結果:
- CVE-2020-29509: Go的encoding/xml中XML 屬性不穩定
- CVE-2020-29510: Go的encoding/xml中XML 指令不穩定
- CVE-2020-29511: Go的encoding/xml中XML 元素不穩定
這些漏洞是緊密相關的,其中核心的共性問題是:惡意偽造的XML markup可以通過GO的編解碼實現在多輪通信中會發生變異(變化)。
Mattermost 產品安全工程師Nurminen 解釋說,如果應用使用XML 解析器,那么編碼器和解碼器就不會保留原始markup的語義。
應用在處理XML 和解析不是之前解析和序列化的輸出的markup時,就不能保證解析的輸出和上一輪的輸出是匹配的。換句話說,通過Go 的編碼器和解碼器傳遞XML 并不能保留其語義。
其中一個補丁也證明了由于這些漏洞,在XML 解析期間確實會發生不連續的情況。比如,`
SAML 認證繞過
這看起來是個簡單的漏洞,雖然許多應用都希望能實現語義的完整性,但這些漏洞可能會引發嚴重的后果。
比如,攻擊者可以觸發利用上述XML 解析器的SAML 實現來繞過SAML 認證。Security Assertion Markup Language (SAML)是一種web認證標準,被許多主流網站和服務使用。由于這些漏洞,基于Go 的SAML實現可以被攻擊者利用,通過注入惡意markup到正確簽名的SAML消息中,這樣看起來是經過正確簽名的,但是其語義與原始文檔就完全不同了。
對于SAML SSO系統來說,攻擊者利用有漏洞的XML 解析器可能會引發權限提升或認證繞過。
目前沒有補丁
目前,Go 安全團隊已經發布安全公告,但是目前還沒有補丁來快速修復這些安全漏洞。因為round-trip (多輪)穩定性并部署encoding/xml支持的安全特性,因此單單補丁本身也無法確保XML 解析的可靠性。
但是目前已經有多個基于Go 的SAML 項目發布了修復版本,比如:
- Dex IDP version 2.27.0
- github.com/crewjam/saml version 0.4.3
- github.com/russellhaering/gosaml2 version 0.6.0
更多技術細節參見:https://mattermost.com/blog/coordinated-disclosure-go-xml-vulnerabilities/
本文翻譯自:
https://www.bleepingcomputer.com/news/security/critical-golang-xml-parser-bugs-can-cause-saml-authentication-bypass/