严重的Golang XML分析器错误可能导致SAML身份验证绕过

安全

本周,Mattermost与Golang协作,揭示了Go语言的XML解析器中的3个关键漏洞。

如果利用这些漏洞,还会影响多个基于Go的SAML实施,可能会导致SAML身份验证完全绕开,从而为当今的杰出Web应用程序提供支持。

XML解析器不能保证完整性

下面列出的XML双向漏洞在Golang的XML语言解析器encoding / xml 中潜伏着,当对XML输入进行编码和解码时,它不会返回可靠的结果。

这意味着使用解析器对XML标记进行编码和解码时,可能会返回不一致和意外的结果。

“从标题可以明显看出,这些漏洞是紧密相关的。这三个核心问题都是相同的:恶意复制的XML标记在通过Go的解码器和编码器实现的往返过程中发生了变异,” Mattermost产品安全工程师Juho Nurminen说。

Nurminen解释说,这意味着如果应用程序使用XML解析器,则编码器和解码器将不会保留原始标记的语义。

“如果您的应用程序处理XML并在处理XML时对其进行解析,则标记至少是前一轮解析和序列化的输出,您将无法再假设该解析的输出与前一轮的输出匹配。换句话说,通过Go的解码器和编码器传递XML不会保留其语义。” Nurminen解释说。

 针对漏洞所做的部分修复之一表明,由于这些缺陷,在XML解析期间可能会出现不一致的情况。

例如,<:name>将去除冒号,同样,在序列化过程中,将呈现带有属性包含空值(“”)的XML标签。

可能完全绕过SAML身份验证

乍一看,这似乎是个小错误,但Mattermost强调,多个应用程序期望语义完整性,而这些漏洞可能会带来严重的后果。

例如,攻击者可以欺骗依赖于所述XML解析器的各种SAML实现,以完全绕开SAML身份验证。  

安全声明标记语言(SAML)是一种Web认证标准,被多个著名的网站和服务使用,以简化使用XML的在线登录。

 “由于存在这些漏洞,基于Go的SAML实现在很多情况下容易受到攻击者的篡改:通过向正确签名的SAML消息注入恶意标记,有可能使它仍然显示为正确签名,但可以更改其语义以传达与原始文件不同的身份。” Mattermost警告说 。

如果关键任务应用程序正在使用XML解析器,则SAML SSO系统内的影响可能是特权升级或身份验证绕过,这取决于应用程序如何使用易受攻击的XML解析器。

解析器本身没有可用的补丁

值得注意的是,Go安全团队目前已建议,尚无补丁程序可以充分修补这些漏洞。

上述修订提交还指出,往返稳定性不是encoding / xml 的受支持安全属性, 仅使修订不足以保证XML解析的可靠性。

但是,已经为某些单独的基于Go的SAML项目发布了固定版本,例如:

此外,Mattermost还提供了一个工具“ xml-roundtrip-validator ”,可以在将XML验证并入您的应用程序时用作解决方法。

Mattermost研究人员的完整发现和披露时间表已在其博客文章中提供。

*编译:Domino

*来自:bleepingcomputer