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