超危Golang XML解析器漏洞可导致SAML身份验证绕过
Mattermost公司近日与Golang协同披露了Go语言XML解析器中的三个超危漏洞。
这三个漏洞同时影响多个基于Go的SAML实现,成功利用这些漏洞,攻击者可以完全绕过SAML身份验证,SAML是一种web身份验证标准,许多重要网站和服务使用该标准,简化使用XML的在线登录。
Ø CVE-2020-29509:Go encoding/xml中的XML属性不稳定,CVSS 3.1基准评分为9.8;
Ø CVE-2020-29510:Go encoding/xml中的XML指令不稳定,CVSS 3.1基准评分为9.8;
Ø CVE-2020-29511:Go encoding/xml中的XML元素不稳定,CVSS 3.1基准评分为9.8;
这三个超危漏洞存在于Golang的XML语言解析器encoding/xml中,在编码和解码XML输入时,该解析器未返回可靠的结果。这意味着在使用该解析器编码和解码时,XML标记可能会返回不一致的和非预期的结果。
Mattermost公司的产品安全工程师Juho Nurminen指出,这三个漏洞密切相关,核心问题都是,恶意构造的XML标记在Go的解码器和编码器实现之间的往返过程中发生变化。
Nurminen表示,如果应用程序处理XML,并且在处理XML时,解析至少前一轮解析和序列化的输出的标记,则不能再认为该解析的输出与上一轮的输出匹配。换句话说,通过Go的解码器和编码器传递XML并不能保留它的语义。
针对这些漏洞所做的部分修复之一表明,因这些漏洞影响,在XML解析过程中可能会出现不一致。
例如,“<:name>”将去掉冒号,同样,在序列化过程中,具有包含空值("")的属性的XML标记在序列化过程中将变成完全没有该属性的XML标记。
乍一看,这似乎是一个微不足道的漏洞,但是Mattermost强调许多应用程序都期望语义完整性,这些漏洞可能会造成严重后果。
例如,攻击者可以诱使依赖于上述XML解析器的各种SAML实现绕过SAML身份验证。
Mattermost警告称,由于这些漏洞,基于Go的SAML实现在许多情况下容易被攻击者篡改:通过向正确签名的SAML消息注入恶意标记,可以使其看起来仍然是正确签名,但更改其语义以传递与原始文档不同的标识。
如果任务至关重要的应用程序使用XML解析器,对SAML SSO系统的影响可能是权限提升或绕过身份验证,这取决于应用程序如何使用该脆弱的XML解析器。
值得注意的是,Go安全团队表示没有可用的补丁程序可以充分修复这些漏洞。
该团队还声明往返稳定性不是encoding/xml支持的安全属性,这使得单独的补丁不足以保证XML解析的可靠性。
但是,一些基于Go的SAML项目已经发布了修复版本,例如:
Ø github.com/crewjam/saml version 0.4.3
Ø github.com/russellhaering/gosaml2 version 0.6.0
此外,Mattermost提供了一个工具“xml-roundtrip-validator”,在将XML验证并入应用程序时,该工具可以作为一种解决方法。
标签: