当前位置: 首页 > 科技观察

GolangXML解析器漏洞可导致SAML身份验证绕过

时间:2023-03-13 04:17:40 科技观察

12月14日,Mattermost和Golang团队发布了三个Go语言XML解析器安全漏洞。该漏洞影响多个基于Go的SAML实现,并可能导致完全绕过SAML身份验证。XMLParser无法保证完整性下面列出的GolangXML语言解析器漏洞导致其在对XML输入进行编码和解码时无法返回可靠的结果,即使用解析器进行编码时不会返回XML标记(markup)。返回不连续和意外的结果:CVE-2020-29509:Go的编码/xml中的XML属性不稳定CVE-2020-29510:Go的编码/xml在XML指令中不稳定CVE-2020-29511:Go的编码/xml中的XML元素不稳定。这些漏洞密切相关,核心共性问题是:恶意伪造的XML标记可以通过GO的编解码器在多轮通信中发生变异(改变)。Mattermost产品安全工程师Nurminen解释说,如果应用程序使用XML解析器,那么编码器和解码器将不会保留原始标记的语义。当应用程序处理XML并解析不是先前解析和序列化输出的标记时,无法保证解析后的输出与前一轮的输出相匹配。换句话说,通过Go的编码器和解码器传递XML不会保留其语义。其中一个补丁还表明,由于这些错误,在XML解析期间确实会出现不连续性。例如,`SAML身份验证绕过这似乎是一个简单的漏洞,但是虽然许多应用程序希望实现语义完整性,但这些漏洞可能会产生严重的后果。例如,攻击者可以触发利用上述XML解析器绕过SAML身份验证的SAML实现。安全断言标记语言(SAML)是许多主要网站和服务使用的Web身份验证标准。由于这些漏洞,攻击者可以通过将恶意标记注入正确签名的SAML消息中来利用基于Go的SAML实现,这些消息看似已正确签名,但其语义与原始文档完全不同。对于SAMLSSO系统,攻击者利用易受攻击的XML解析器可能会导致权限提升或身份验证绕过。目前没有补丁目前Go安全团队已经发布了安全公告,但是目前还没有补丁可以快速修复这些安全漏洞。由于往返(多轮)稳定性和encoding/xml支持安全特性的部署,单靠补丁无法保证XML解析的可靠性。然而,几个基于Go的SAML项目已经发布了修复版本,例如:DexIDP版本2.27.0github.com/crewjam/saml版本0.4.3github.com/russellhaering/gosaml2版本0.6.0更多技术细节参见:https://mattermost.com/blog/coordinated-disclosure-go-xml-vulnerabilities/本文翻译自:https://www.bleepingcomputer.com/news/security/critical-golang-xml-parser-bugs-can-原因-saml-身份验证绕过/