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