需要 SOAP 安全建议



在进行完整的第三方渗透测试之前,我们的一位客户已经对我们的系统进行了初步的安全审计。

这揭示了一些我们乐于处理的潜在漏洞,但报告中有一个项目我不确定我是否同意,但我无法说服他们。

他们报告说,他们已经能够向我们的一个基于 SOAP 的 Web 服务发送一条被篡改的消息,并且它报告了一个错误。 他们认为,这意味着服务器已尝试处理消息。

所以请求看起来像这样:-

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://example.com/soap/envelope/]]&gt;&gt;&lt;" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<tns:SomeMethod xmlns:tns="http://example.com/"/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

请注意插入到xmlns:SOAP-ENV 属性中的编码 ]]>><</strong>。

来自服务器的响应是:-

<soap:Body>
<soap:Fault>
<faultcode>soap:VersionMismatch</faultcode>
<faultstring>Possible SOAP version mismatch: Envelope namespace http://example.com/soap/envelope/]]&gt;&gt;&lt; was unexpected. Expecting http://example.com/soap/envelope/.</faultstring>
<detail />
</soap:Fault>
</soap:Body>

他们的论点是,这表明有效负载已入到 XML 文档中,因此已被处理(大概使我们面临 XXE 漏洞之类的事情(,并且该错误是 SOAP 错误而不是通用 500 错误的事实证明了这一点。

我不相信是这种情况,但我正在努力说服客户。 根据这篇(https://msdn.microsoft.com/en-us/library/aa480498.aspx(文章,XmlSerializer 负责将 SOAP Xml 序列化和反序列化为参数,因此这拒绝了错误的 SOAP 信封。

谁能确认我们是否有安全问题?如果这是我们应该如何解决它?

谁能确认我们是否有安全问题?如果这是我们应该如何解决它?

没有安全问题。

对于此示例,不同的 SOAP 处理器将生成不同的错误消息,尽管 SOAP 协议建议使用"SOAP 版本不匹配"错误。根据我 10+ 年使用 XML、SOAP 和其他 Web 服务协议的经验,他的 SOAP 处理器所做的是完全合法的。它只是根据 XML 命名空间不匹配拒绝SOAP-ENV:Envelope限定标记,因为 xmlns 绑定 URI 与预期的 URI 完全不同:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://example.com/soap/envelope/]]&gt;&gt;&lt;"

事实上,这个XML是完全合法的。并且它应该被 SOAP 处理器拒绝,并出现 SOAP 版本不匹配错误。

最新更新