Axis2是一个Web服务的核心支援引擎。
根据SOAP 1.1规范的规定,SOAP消息总不能包含有文档类型声明(DTD)。在Axis2中,是通过StAXSOAPModelBuilder类来实现这个限制的。这个方法存在两个问题:
[color=red]1 仅适用于SOAP绑定,而支持纯XML消息的HTTP绑定仍允许请求消息中存在DTD。
2 在处理带有DTD的文档时,StAXSOAPModelBuilder仅在从StAX解析器接收到DTD事件后才会报告错误,而这时StAX解析器可能已经处理或部分处理了DTD。
这说明Axis2受基于DTD的XML攻击的影响。有两种类型的攻击[/color]:
* DTD可能引用其他的文档,也就是内部子集中所声明的DTD或外部实体。如果对XML解析器配置了默认的实体解析器(在本文所述情况下为Axis2),就会允许攻击者要求解析器访问任意文件。由于可能将URL用作系统ID,这包括仅可在服务器所部署的网络中访问的远程资源。
* 尽管XML不允许递归实体定义,但允许嵌套的实体定义。如果文档中包含有深度嵌套的实体定义,解析该文档就会在实体展开期间导致非常高的CPU和内存消耗。
根据SOAP 1.1规范的规定,SOAP消息总不能包含有文档类型声明(DTD)。在Axis2中,是通过StAXSOAPModelBuilder类来实现这个限制的。这个方法存在两个问题:
[color=red]1 仅适用于SOAP绑定,而支持纯XML消息的HTTP绑定仍允许请求消息中存在DTD。
2 在处理带有DTD的文档时,StAXSOAPModelBuilder仅在从StAX解析器接收到DTD事件后才会报告错误,而这时StAX解析器可能已经处理或部分处理了DTD。
这说明Axis2受基于DTD的XML攻击的影响。有两种类型的攻击[/color]:
* DTD可能引用其他的文档,也就是内部子集中所声明的DTD或外部实体。如果对XML解析器配置了默认的实体解析器(在本文所述情况下为Axis2),就会允许攻击者要求解析器访问任意文件。由于可能将URL用作系统ID,这包括仅可在服务器所部署的网络中访问的远程资源。
* 尽管XML不允许递归实体定义,但允许嵌套的实体定义。如果文档中包含有深度嵌套的实体定义,解析该文档就会在实体展开期间导致非常高的CPU和内存消耗。
本文深入探讨了Axis2 Web服务核心引擎在处理SOAP消息时存在的安全漏洞,特别是针对DTD(文档类型声明)的攻击。指出在Axis2中,虽然实现了对SOAP绑定的限制,但对于支持纯XML消息的HTTP绑定仍存在风险。此外,当处理包含DTD的文档时,StAXSOAPModelBuilder类可能会导致基于DTD的XML攻击,如内部子集引用或深度嵌套的实体定义引发的安全问题。

841

被折叠的 条评论
为什么被折叠?



